When running my application (Windows, Java 21, dns-java 3.6.1) I get the following Exception:
java.util.ServiceConfigurationError: [java.net](http://java.net/).spi.InetAddressResolverProvider: Provider org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider not found
at java.base/[java.util.ServiceLoader.fail](http://java.util.serviceloader.fail/)([ServiceLoader.java:589](http://serviceloader.java:589/))
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass([ServiceLoader.java:1215](http://serviceloader.java:1215/))
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService([ServiceLoader.java:1224](http://serviceloader.java:1224/))
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext([ServiceLoader.java:1269](http://serviceloader.java:1269/))
at java.base/java.util.ServiceLoader$2.hasNext([ServiceLoader.java:1305](http://serviceloader.java:1305/))
at java.base/java.util.ServiceLoader$3.hasNext([ServiceLoader.java:1387](http://serviceloader.java:1387/))
at java.base/java.util.ServiceLoader.findFirst([ServiceLoader.java:1800](http://serviceloader.java:1800/))
at java.base/[java.net](http://java.net/).InetAddress.loadResolver([InetAddress.java:508](http://inetaddress.java:508/))
at java.base/[java.net](http://java.net/).InetAddress.resolver([InetAddress.java:488](http://inetaddress.java:488/))
at java.base/[java.net](http://java.net/).InetAddress.getAddressesFromNameService([InetAddress.java:1814](http://inetaddress.java:1814/))
at java.base/[java.net](http://java.net/).InetAddress$NameServiceAddresses.get([InetAddress.java:1149](http://inetaddress.java:1149/))
at java.base/[java.net](http://java.net/).InetAddress.getAllByName0([InetAddress.java:1806](http://inetaddress.java:1806/))
at java.base/[java.net](http://java.net/).InetAddress.getAllByName([InetAddress.java:1676](http://inetaddress.java:1676/))
at io.grpc.internal.DnsNameResolver$JdkAddressResolver.resolveAddress([DnsNameResolver.java:632](http://dnsnameresolver.java:632/))
at io.grpc.internal.DnsNameResolver.resolveAddresses([DnsNameResolver.java:219](http://dnsnameresolver.java:219/))
at io.grpc.internal.DnsNameResolver.doResolve([DnsNameResolver.java:282](http://dnsnameresolver.java:282/))
at io.grpc.internal.DnsNameResolver$[Resolve.run](http://resolve.run/)([DnsNameResolver.java:318](http://dnsnameresolver.java:318/))
...
Problem analysis
DNS Java uses a multi-version Jar. However, while the class org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider is only included when built with Java 18 or later, the service file META-INF/services/java.net.spi.InetAddressResolverProvider is always included.
My theory (not verified): The Maven artifact has probably been built with Java 17 or earlier, hence it contains the service file but not the Java 18 DnsjavaInetAddressResolverProvider. When a Java 18 application uses Java DNS, the service file tries to look up the class and fails.
Workarounds
Run application with Java 11 instead of 21
Exclude the META-INF/services/java.net.spi.InetAddressResolverProvider from your project
Problem description
When running my application (Windows, Java 21, dns-java 3.6.1) I get the following Exception:
Problem analysis
DNS Java uses a multi-version Jar. However, while the class
org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider
is only included when built with Java 18 or later, the service fileMETA-INF/services/java.net.spi.InetAddressResolverProvider
is always included.My theory (not verified): The Maven artifact has probably been built with Java 17 or earlier, hence it contains the service file but not the Java 18
DnsjavaInetAddressResolverProvider
. When a Java 18 application uses Java DNS, the service file tries to look up the class and fails.Workarounds
META-INF/services/java.net.spi.InetAddressResolverProvider
from your project