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)