Basil Crow created MNG-8656: ------------------------------- Summary: Maven cannot be embedded in applications that have upgraded Guice to 7.0+ Key: MNG-8656 URL: https://issues.apache.org/jira/browse/MNG-8656 Project: Maven Issue Type: Bug Components: Core Affects Versions: 3.9.9 Reporter: Basil Crow
With Java 17, install Jenkins 2.503, create a Maven installation for Maven 3.9.9, and create a Maven project building e.g. https://github.com/basil/simple-maven-project-with-tests. The job should succeed. Now run the same job against https://github.com/jenkinsci/jenkins/pull/8889 which upgrades Guice from 6.0 (which supports both {{javax.inject}} and {{jakarta.inject}} imports) to 7.0 (which only supports jakarta.inject imports). The job fails with: {noformat} java.lang.IllegalArgumentException: org.eclipse.sisu.Parameters is not a binding annotation. Please annotate it with @BindingAnnotation. at com.google.common.base.Preconditions.checkArgument(Preconditions.java:218) at com.google.inject.Key.ensureIsBindingAnnotation(Key.java:382) at com.google.inject.Key.strategyFor(Key.java:370) at com.google.inject.Key.get(Key.java:229) at org.eclipse.sisu.wire.ParameterKeys.<clinit>(ParameterKeys.java:28) Caused: java.lang.ExceptionInInitializerError at org.eclipse.sisu.wire.DependencyAnalyzer.<init>(DependencyAnalyzer.java:93) at org.eclipse.sisu.wire.ElementAnalyzer.<init>(ElementAnalyzer.java:104) at org.eclipse.sisu.wire.WireModule.configure(WireModule.java:74) at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:426) at com.google.inject.spi.Elements.getElements(Elements.java:113) at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:160) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) at com.google.inject.Guice.createInjector(Guice.java:87) at com.google.inject.Guice.createInjector(Guice.java:69) at com.google.inject.Guice.createInjector(Guice.java:59) at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:481) at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:206) at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:168) at hudson.maven.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:166) at hudson.maven.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:159) at hudson.maven.MavenEmbedder.<init>(MavenEmbedder.java:110) at hudson.maven.MavenEmbedder.<init>(MavenEmbedder.java:137) at hudson.maven.MavenUtil.createEmbedder(MavenUtil.java:211) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1324) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1124) at hudson.FilePath.act(FilePath.java:1236) at hudson.FilePath.act(FilePath.java:1219) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.parsePoms(MavenModuleSetBuild.java:985) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:689) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526) at hudson.model.Run.execute(Run.java:1895) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543) at hudson.model.ResourceController.execute(ResourceController.java:101) at hudson.model.Executor.run(Executor.java:442) {noformat} This is blocking the Jenkins project from upgrading Guice from 6.0 to 7.0. This problem was previously raised in MNG-8027, where it was suggested that Maven moving away from Guice may be a long-term direction that resolves this problem. As long the above symptom persists, the problem remains unresolved. Closing the ticket based on a future plan that has not yet been implemented does not eliminate the current problem. This ticket tracks the current problem—namely, that Maven cannot currently be embedded into an application running the latest version of Guice. It ought to be possible to embed Maven into any application with up-to-date dependencies; otherwise, Maven would be holding that application back. When Maven can be embedded into an application running up-to-date dependencies, this ticket can be closed—regardless of how that goal is achieved (e.g., Maven upgrading to Guice 7 or later, Maven upgrading to Guice 6.x and migrating from {{javax.inject}} to {{jakarta.inject}}, Maven moving away from Guice as described in MNG-8028, or another solution entirely). -- This message was sent by Atlassian Jira (v8.20.10#820010)