Bug#918772: Fetching fails with NoSuchMethodError under Java 8 (java.nio.ByteBuffer.flip())

Timo Kalliomäki timoka10 at gmail.com
Wed Jan 9 07:45:41 GMT 2019


Package: libwagon-http-shaded-java
Version: 3.2.0-2
Severity: important

Dear Maintainer,

when trying to run Maven for a Java 8 project, fetching metadata fails with
java.lang.NoSuchMethodError. See log excerpt below for details.

The gist is that handling URLs, HttpClient does a flip() to a ByteBuffer. From
Java 9 the said method has a covariant return type, so the resultant bytecode
calls java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer which fails under Java 8.
A quick search showed that one strategy people are using to produce bytecode
compatible on both JREs is doing ((Buffer)byteBuffer).flip().

Br,
Timo

$ mvn initialize -X
Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime:
/usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: fi_FI, platform encoding: UTF-8
OS name: "linux", version: "4.19.0-1-amd64", arch: "amd64", family: "unix"
...
[DEBUG] Using transporter WagonTransporter with priority -1.0 for
https://jcenter.bintray.com/
[DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for
https://jcenter.bintray.com/
Downloading from jcenter:
https://jcenter.bintray.com/net/minidev/json-smart/2.3-SNAPSHOT/json-smart-2.3-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.936 s
[INFO] Finished at: 2019-01-09T09:19:46+02:00
[INFO] ------------------------------------------------------------------------
---------------------------------------------------
constituent[0]: file:/usr/share/maven/conf/logging/
constituent[1]: file:/usr/share/maven/lib/maven-settings-builder-3.x.jar
constituent[2]: file:/usr/share/maven/lib/maven-plugin-api-3.x.jar
constituent[3]: file:/usr/share/maven/lib/plexus-cipher.jar
constituent[4]: file:/usr/share/maven/lib/aopalliance.jar
constituent[5]: file:/usr/share/maven/lib/maven-model-3.x.jar
constituent[6]: file:/usr/share/maven/lib/wagon-http-shaded.jar
constituent[7]: file:/usr/share/maven/lib/plexus-utils.jar
constituent[8]: file:/usr/share/maven/lib/maven-resolver-transport-wagon.jar
constituent[9]: file:/usr/share/maven/lib/cdi-api.jar
constituent[10]: file:/usr/share/maven/lib/plexus-component-annotations.jar
constituent[11]: file:/usr/share/maven/lib/maven-resolver-spi.jar
constituent[12]: file:/usr/share/maven/lib/maven-builder-support-3.x.jar
constituent[13]: file:/usr/share/maven/lib/guava.jar
constituent[14]: file:/usr/share/maven/lib/sisu-inject.jar
constituent[15]: file:/usr/share/maven/lib/sisu-plexus.jar
constituent[16]: file:/usr/share/maven/lib/jcl-over-slf4j.jar
constituent[17]: file:/usr/share/maven/lib/maven-resolver-connector-basic.jar
constituent[18]: file:/usr/share/maven/lib/maven-repository-metadata-3.x.jar
constituent[19]: file:/usr/share/maven/lib/commons-cli.jar
constituent[20]: file:/usr/share/maven/lib/commons-io.jar
constituent[21]: file:/usr/share/maven/lib/maven-embedder-3.x.jar
constituent[22]: file:/usr/share/maven/lib/plexus-interpolation.jar
constituent[23]: file:/usr/share/maven/lib/maven-artifact-3.x.jar
constituent[24]: file:/usr/share/maven/lib/maven-resolver-provider-3.x.jar
constituent[25]: file:/usr/share/maven/lib/plexus-sec-dispatcher.jar
constituent[26]: file:/usr/share/maven/lib/wagon-file.jar
constituent[27]: file:/usr/share/maven/lib/jsr250-api.jar
constituent[28]: file:/usr/share/maven/lib/maven-slf4j-provider-3.x.jar
constituent[29]: file:/usr/share/maven/lib/jansi.jar
constituent[30]: file:/usr/share/maven/lib/javax.inject.jar
constituent[31]: file:/usr/share/maven/lib/maven-model-builder-3.x.jar
constituent[32]: file:/usr/share/maven/lib/maven-resolver-impl.jar
constituent[33]: file:/usr/share/maven/lib/maven-resolver-api.jar
constituent[34]: file:/usr/share/maven/lib/maven-compat-3.x.jar
constituent[35]: file:/usr/share/maven/lib/maven-settings-3.x.jar
constituent[36]: file:/usr/share/maven/lib/maven-core-3.x.jar
constituent[37]: file:/usr/share/maven/lib/slf4j-api.jar
constituent[38]: file:/usr/share/maven/lib/guice.jar
constituent[39]: file:/usr/share/maven/lib/wagon-provider-api.jar
constituent[40]: file:/usr/share/maven/lib/maven-shared-utils.jar
constituent[41]: file:/usr/share/maven/lib/commons-lang3.jar
constituent[42]: file:/usr/share/maven/lib/maven-resolver-util.jar
---------------------------------------------------
Exception in thread "main" java.lang.NoSuchMethodError:
java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URLEncodedUtils.urlDecode(URLEncodedUtils.java:590)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URLEncodedUtils.decodeFormFields(URLEncodedUtils.java:619)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:316)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:249)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URIBuilder.parseQuery(URIBuilder.java:110)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URIBuilder.digestURI(URIBuilder.java:200)
        at org.apache.maven.wagon.providers.http.httpclient.client.utils.URIBuilder.<init>(URIBuilder.java:90)
        at org.apache.maven.wagon.providers.http.httpclient.impl.client.DefaultRedirectStrategy.createLocationURI(DefaultRedirectStrategy.java:189)
        at org.apache.maven.wagon.providers.http.httpclient.impl.client.DefaultRedirectStrategy.getLocationURI(DefaultRedirectStrategy.java:148)
        at org.apache.maven.wagon.providers.http.httpclient.impl.client.DefaultRedirectStrategy.getRedirect(DefaultRedirectStrategy.java:221)
        at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:121)
        at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
        at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
        at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:936)
        at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:1095)
        at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:1072)
        at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:126)
        at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
        at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
        at org.eclipse.aether.transport.wagon.WagonTransporter$GetTaskRunner.run(WagonTransporter.java:567)
        at org.eclipse.aether.transport.wagon.WagonTransporter.execute(WagonTransporter.java:435)
        at org.eclipse.aether.transport.wagon.WagonTransporter.get(WagonTransporter.java:412)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:456)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:363)
        at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:642)
        at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:262)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:489)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:390)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:215)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:192)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:240)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:171)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:530)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:515)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:403)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:356)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process(DefaultDependencyCollector.java:344)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse(DefaultDependencyCollector.java:498)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:451)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:356)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process(DefaultDependencyCollector.java:344)
        at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:247)
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:269)
        at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:169)
        at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:243)
        at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:147)
        at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:248)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:202)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=fi_FI.UTF-8, LC_CTYPE=fi_FI.UTF-8 (charmap=UTF-8),
LANGUAGE= (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

-- no debconf information



More information about the pkg-java-maintainers mailing list