Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unclear exceptions from quarkus-maven-plugin 3.8 when used on Java 11 #39358

Open
gemmellr opened this issue Mar 12, 2024 · 3 comments
Open

unclear exceptions from quarkus-maven-plugin 3.8 when used on Java 11 #39358

gemmellr opened this issue Mar 12, 2024 · 3 comments
Labels
area/maven kind/bug Something isn't working

Comments

@gemmellr
Copy link
Contributor

gemmellr commented Mar 12, 2024

Describe the bug

Quarkus 3.8.x requires Java 17. However quarkus-maven-plugin still targets Java 11 for some reason (EDIT: explained further down). This allows things to proceed further than it would seem they should if someone runs it on Java 11 for Quarkus 3.8.x, and then it fails in an obscure way that isnt obviously 'oops, you need to use Java 17'.

If someone tries to use it on Java 11, for example by running a quickstart they had used ok with an earlier Quarkus version that only requires Java 11, then a fairly unclear NoSuchElementException is ultimately reported, after a QuarkusBootstrapProvider related failure, rather than a more useful error or perhaps a much earlier failure and more typical/known class version error if quarkus-maven-plugin had required Java 17.

Expected behavior

No weird NoSuchElementException etc failures reported. Either a more obvious / already-understood class version error from quarkus-maven-plugin 3.8.x requiring Java 17 like Quarkus 3.8.x itself, or clearer 'You need to use Java 17+ with this version of quarkus' style error if there is some reason the plugin should actually still be targeting Java 11.

Actual behavior

mvn clean verify
[INFO] Scanning for projects...
[WARNING] ClassRealm[extension>io.quarkus.platform:quarkus-maven-plugin:3.8.2, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@55054057]
com.google.inject.CreationException: Unable to create injector, see the following errors:

1) [Guice/MissingImplementation]: No implementation for QuarkusBootstrapProvider annotated with interface TypeArguments$Implicit was bound.

Did you mean?
    QuarkusBootstrapProvider bound at LocatorWiring

Requested by:
1  : LocatorWiring

Learn more:
  https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION

1 error

======================
Full classname legend:
======================
LocatorWiring:            "org.eclipse.sisu.wire.LocatorWiring"
QuarkusBootstrapProvider: "io.quarkus.maven.QuarkusBootstrapProvider"
TypeArguments$Implicit:   "org.eclipse.sisu.inject.TypeArguments$Implicit"
========================
End of classname legend:
========================

    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist (Errors.java:576)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically (InternalInjectorCreator.java:163)
    at com.google.inject.internal.InternalInjectorCreator.build (InternalInjectorCreator.java:110)
    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.discoverComponents (DefaultPlexusContainer.java:460)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.discoverPluginComponents (DefaultMavenPluginManager.java:410)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.setupExtensionsRealm (DefaultMavenPluginManager.java:804)
    at org.apache.maven.project.DefaultProjectBuildingHelper.createProjectRealm (DefaultProjectBuildingHelper.java:177)
    at org.apache.maven.project.DefaultModelBuildingListener.buildExtensionsAssembled (DefaultModelBuildingListener.java:92)
    at org.apache.maven.model.building.ModelBuildingEventCatapult$1.fire (ModelBuildingEventCatapult.java:40)
    at org.apache.maven.model.building.DefaultModelBuilder.fireEvent (DefaultModelBuilder.java:1269)
    at org.apache.maven.model.building.DefaultModelBuilder.build (DefaultModelBuilder.java:474)
    at org.apache.maven.model.building.DefaultModelBuilder.build (DefaultModelBuilder.java:455)
    at org.apache.maven.project.DefaultProjectBuilder.build (DefaultProjectBuilder.java:612)
    at org.apache.maven.project.DefaultProjectBuilder.build (DefaultProjectBuilder.java:375)
    at org.apache.maven.graph.DefaultGraphBuilder.collectProjects (DefaultGraphBuilder.java:349)
    at org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor (DefaultGraphBuilder.java:340)
    at org.apache.maven.graph.DefaultGraphBuilder.build (DefaultGraphBuilder.java:76)
    at org.apache.maven.DefaultMaven.buildGraph (DefaultMaven.java:448)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:197)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
[INFO] 
[INFO] ----------------------< org.acme:jms-quickstart >-----------------------
[INFO] Building jms-quickstart 1.0.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ jms-quickstart ---
[INFO] Deleting /home/rgemmell/workspace/quarkus-qpid-jms-quickstart/target
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ jms-quickstart ---
[INFO] Copying 2 resources from src/main/resources to target/classes
[INFO] 
[INFO] --- quarkus:3.8.2:generate-code (default) @ jms-quickstart ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.926 s
[INFO] Finished at: 2024-03-12T11:54:22Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:3.8.2:generate-code (default) on project jms-quickstart: Execution default of goal io.quarkus.platform:quarkus-maven-plugin:3.8.2:generate-code failed: Unable to load the mojo 'generate-code' (or one of its required components) from the plugin 'io.quarkus.platform:quarkus-maven-plugin:3.8.2': java.util.NoSuchElementException
[ERROR]       role: org.apache.maven.plugin.Mojo
[ERROR]   roleHint: io.quarkus.platform:quarkus-maven-plugin:3.8.2:generate-code
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException

How to Reproduce?

  1. Have Java 11 as the primary JDK on the path.
  2. Run mvn clean verify on e.g a quickstart that uses Quarkus 3.8.x , e.g https://github.com/amqphub/quarkus-qpid-jms-quickstart.git (Note though that I may add an enforcer check to it, to clearly error ' You must use Java 17'....if so, you might need to disable that to reproduce, e.g add -Denforcer.skip to the command )

Output of uname -a or ver

No response

Output of java -version

No response

Quarkus version or git rev

No response

Build tool (ie. output of mvnw --version or gradlew --version)

No response

Additional information

No response

@gemmellr gemmellr added the kind/bug Something isn't working label Mar 12, 2024
@quarkus-bot
Copy link

quarkus-bot bot commented Mar 12, 2024

/cc @quarkusio/devtools (maven)

@gemmellr
Copy link
Contributor Author

gemmellr commented Mar 12, 2024

From Zulip chat this was apparently expected/intended for now, because updating quarkus-maven-plugin to targeting Java 17 caused Sisu issues and CI failures even when running on Java 17:

https://quarkusio.zulipchat.com/#narrow/stream/187038-dev/topic/Plugins.20compiled.20for.20Java.2011.20despite.20Quarkus.20requiring.2017.3F/near/426114221

From which it seems that Maven 3.9.6 is required to be used to successfully target Java 17+ for plugins:
https://issues.apache.org/jira/browse/MNG-7913 and
https://quarkusio.zulipchat.com/#narrow/stream/187038-dev/topic/Plugins.20compiled.20for.20Java.2011.20despite.20Quarkus.20requiring.2017.3F/near/426117614

I'll add an enforcer rule to the quickstart I referenced so that folks do get a more obvious error there, albeit it still prints the initial QuarkusBootstrapProvider related problems, it just then wont report the NoSuchElementException but instead explicitly say 'Java 17 or newer is required' instead.

I'll leave this issue open for now for any future improvements (such as going to a 3.9.6 minimum and being able to properly target the plugin to Java 17), and for to help explain things for other users if they hit it.

gemmellr added a commit to amqphub/quarkus-qpid-jms-quickstart that referenced this issue Mar 12, 2024
Situation cant be fully handled as quarkus-maven-plugin must target Java 11 for now
even though Quarkus requires Java 17, as only Maven 3.9.6+ can actually handle
plugins targeted to Java 17.

See quarkusio/quarkus#39358 and https://issues.apache.org/jira/browse/MNG-7913
@alizard0
Copy link

alizard0 commented Jun 7, 2024

Hey folks, I had similar problem with java v11 and quarkus-maven-plugin v3.8.4. The error was : Unable to load the mojo 'generate-code'

After reading your comments, I tried to compile running java 17 and everything worked. Hope it helps someone!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/maven kind/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants