From cd124a0c2c76e329ddff6360d0bfa114dff296ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Manciot?= Date: Thu, 30 Jul 2026 14:59:12 +0200 Subject: [PATCH] fix(build): drop classless dnsjava InetAddressResolverProvider service entry from cli assemblies (Closed Issue #171) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dnsjava (transitive via hadoop-client -> hadoop-common) ships META-INF/services/java.net.spi.InetAddressResolverProvider registering org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider, but that class only exists under META-INF/versions/18/ of the multi-release jar, which the cli assembly's META-INF discard rule drops. The kept classless registration makes JDK 18+ (JEP 418) fail every name resolution — every query fails on JDK 21 with the published 0.20.1 plain cli assemblies. Discard the service entry in the shared cliProject merge strategy (covers es6/7/8/9 cli). Co-Authored-By: Claude Fable 5 --- build.sbt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build.sbt b/build.sbt index 807c6178..d4bdd41a 100644 --- a/build.sbt +++ b/build.sbt @@ -321,6 +321,14 @@ def cliProject(esVersion: String, ss: Def.SettingsDefinition*): Project = { ), assembly / assemblyMergeStrategy := { + // Issue #171: dnsjava (transitive via hadoop-client -> hadoop-common) registers + // org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider, but the provider class only + // exists under META-INF/versions/18/ (multi-release jar), which the META-INF discard + // rule below drops. Keeping the classless registration breaks ALL name resolution on + // JDK 18+ (JEP 418 consults the InetAddressResolver SPI on first lookup), so the + // service entry must be discarded along with the class. + case PathList("META-INF", "services", "java.net.spi.InetAddressResolverProvider") => + MergeStrategy.discard case PathList("META-INF", "services", _ @_*) => MergeStrategy.concat case PathList("META-INF", _ @_*) => MergeStrategy.discard case "reference.conf" => MergeStrategy.concat