NPE during display-discovered-jdk-toolchains goal in ToolchainDiscoverer.discoverToolchains()
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- java
- Domain
- build-system
Research direction
Start in src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java at discoverToolchains(), especially lines 152-155, and reproduce the issue with the display-discovered-jdk-toolchains Maven command and an unusable JDK installation. Done means a JDK whose version cannot be obtained is ignored without an NPE, while the other discovered JDK toolchains are still reported.
Written by the indexing model from the issue text.
Description
Affected version
3.3.0
Bug description
This is similar to #113 and #119 , the cause just moves around.
This time it's here: https://github.com/apache/maven-toolchains-plugin/blob/44956705ba6ba0ff6a750cdae1878f5bcf15e167/src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java#L152-L155
ToolchainModel tc is set to null on line 152, and dereferenced on line 155.
I have an install of JDK 1.5 at /usr/lib/jvm/jdk1.5.0_22/ which I use to trigger these issues, should you want to replicate.
Command issued mvn -X org.apache.maven.plugins:maven-toolchains-plugin:3.3.0:display-discovered-jdk-toolchains
Output:
[DEBUG] Loading mojo org.apache.maven.plugins:maven-toolchains-plugin:3.3.0:display-discovered-jdk-toolchains from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-toolchains-plugin:3.3.0, parent: sun.misc.Launcher$AppClassLoader@7852e922]
[DEBUG] Configuring mojo execution 'org.apache.maven.plugins:maven-toolchains-plugin:3.3.0:display-discovered-jdk-toolchains:default-cli' with basic configurator -->
[DEBUG] (f) comparator = lts,current,env,version,vendor
[DEBUG] -- end configuration --
[INFO] Found 3 possible jdks: [/usr/lib/jvm/adoptopenjdk-11-hotspot-amd64, /usr/lib/jvm/jdk1.5.0_22, /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64]
[DEBUG] JDK toolchain discovered at /usr/lib/jvm/jdk1.5.0_22 will be ignored: could not obtain java.version
[WARNING] Error discovering toolchains: java.lang.NullPointerException
java.lang.NullPointerException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
at java.util.concurrent.ForkJoinTask.getThrowableException (ForkJoinTask.java:598)
at java.util.concurrent.ForkJoinTask.reportException (ForkJoinTask.java:677)
at java.util.concurrent.ForkJoinTask.invoke (ForkJoinTask.java:735)
at java.util.stream.Nodes.collect (Nodes.java:328)
at java.util.stream.ReferencePipeline.evaluateToNode (ReferencePipeline.java:109)
at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:541)
at java.util.stream.SortedOps$OfRef.opEvaluateParallel (SortedOps.java:157)
at java.util.stream.AbstractPipeline.opEvaluateParallelLazy (AbstractPipeline.java:705)
at java.util.stream.AbstractPipeline.sourceSpliterator (AbstractPipeline.java:432)
at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:233)
at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:566)
at org.apache.maven.plugins.toolchain.jdk.ToolchainDiscoverer.discoverToolchains (ToolchainDiscoverer.java:162)
at org.apache.maven.plugins.toolchain.jdk.DisplayDiscoveredJdkToolchainsMojo.execute (DisplayDiscoveredJdkToolchainsMojo.java:65)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
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 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: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)
Caused by: java.lang.NullPointerException
at org.apache.maven.plugins.toolchain.jdk.ToolchainDiscoverer.lambda$discoverToolchains$4 (ToolchainDiscoverer.java:155)
at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:193)
at java.util.HashMap$KeySpliterator.forEachRemaining (HashMap.java:1556)
at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:472)
at java.util.stream.Nodes$CollectorTask.doLeaf (Nodes.java:2183)
at java.util.stream.Nodes$CollectorTask.doLeaf (Nodes.java:2149)
at java.util.stream.AbstractTask.compute (AbstractTask.java:327)
at java.util.concurrent.CountedCompleter.exec (CountedCompleter.java:731)
at java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask (ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:175)
[INFO] Discovered 0 JDK toolchains:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.487 s
[INFO] Finished at: 2026-07-28T20:25:55-05:00
[INFO] ------------------------------------------------------------------------
What I think should happen: even if the version can't be determined for a potential JDK, the others should be found.
I also see a lot of Java streams, parallelStream, filter and mapping in this code, but also returning null and (missed) null checks. Why not embrace Optional if you're going to use the other functional patterns? No more nulls, no more NPEs, return Optional.empty().
- Dominant language
- Java
- Stars
- 27
- Forks
- 31
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/maven-toolchains-plugin
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
All issues in apache/maven-toolchains-plugin
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
infinispan/infinispan#18150 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
opensearch-project/k-NN#3597 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100