[
https://issues.apache.org/jira/browse/RAT-553?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Philipp Ottlinger updated RAT-553:
----------------------------------
Fix Version/s: 1.0.0
> NPE with multi-threaded builds
> ------------------------------
>
> Key: RAT-553
> URL: https://issues.apache.org/jira/browse/RAT-553
> Project: Apache RAT
> Issue Type: Task
> Affects Versions: 0.18
> Reporter: Richard Eckart de Castilho
> Priority: Major
> Fix For: 1.0.0
>
>
> Hitting this intermittently with `mvn -T <N>` on a multi-module project that
> has `.gitignore` files:
>
> {noformat}
> NullPointerException: Cannot invoke
> "...AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at
> AbstractFileProcessorBuilder.build(AbstractFileProcessorBuilder.java:133){noformat}
>
> I've also seen what looked like a ConcurrentModificationExcepton in the past
> from the same area — possibly the same bug.
> StandardCollection caches one GitIgnoreBuilder instance and hands it to every
> caller. AbstractFileProcessorBuilder.levelBuilders is an instance field that
> build() mutates and clear()s. With parallel module builds, two threads call
> build() on the same singleton and trample each other's map — get(0) returns
> null, or the keySet iteration in createMatcherSetList blows up with a
> ConcurrentModificationExcepton.
> The mojo declares threadSafe = true, so Maven happily runs it in parallel —
> but the shared mutable state in the builders means that promise isn't
> actually true.
> (Btw. `HgIgnoreBuilder` seems to have a mutable `state` field that may have
> the same issue.)
> I'm seeing this with 0.18. I think 0.16 still worked ok.
> Workaround that worked for me — turn off SCM ignore parsing so the racy code
> path isn't hit:
>
> {noformat}
> <configuration>
> <parseSCMIgnoresAsExcludes>false</parseSCMIgnoresAsExcludes>
> </configuration>{noformat}
>
> ----
>
> {noformat}
> Error: Failed to execute goal org.apache.rat:apache-rat-plugin:0.18:check
> (default) on project inception-workload: Execution default of goal
> org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null ->
> [Help 1]
> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute
> goal org.apache.rat:apache-rat-plugin:0.18:check (default) on project
> inception-workload: Execution default of goal
> org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2
> (MojoExecutor.java:333)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583)
> Caused by: org.apache.maven.plugin.PluginExecutionException: Execution
> default of goal org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot
> invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo
> (DefaultBuildPluginManager.java:133)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583)
> Caused by: java.lang.NullPointerException: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at
> org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder.build
> (AbstractFileProcessorBuilder.java:133)
> at
> org.apache.rat.config.exclusion.ExclusionProcessor.lambda$extractFileProcessors$0
> (ExclusionProcessor.java:232)
> at org.apache.commons.collections4.Transformer.apply (Transformer.java:47)
> at org.apache.commons.collections4.iterators.TransformIterator.transform
> (TransformIterator.java:138)
> at org.apache.commons.collections4.iterators.TransformIterator.next
> (TransformIterator.java:102)
> at java.util.Iterator.forEachRemaining (Iterator.java:133)
> at org.apache.rat.utils.ExtendedIterator.forEachRemaining
> (ExtendedIterator.java:130)
> at
> org.apache.rat.config.exclusion.ExclusionProcessor.extractFileProcessors
> (ExclusionProcessor.java:234)
> at org.apache.rat.config.exclusion.ExclusionProcessor.getNameMatcher
> (ExclusionProcessor.java:208)
> at org.apache.rat.ReportConfiguration.getDocumentExcluder
> (ReportConfiguration.java:434)
> at org.apache.rat.mp.AbstractRatMojo.getConfiguration
> (AbstractRatMojo.java:546)
> at org.apache.rat.mp.RatCheckMojo.getConfiguration (RatCheckMojo.java:166)
> at org.apache.rat.mp.RatCheckMojo.execute (RatCheckMojo.java:205)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583)
> Error: Failed to execute goal org.apache.rat:apache-rat-plugin:0.18:check
> (default) on project inception-io-tei: Execution default of goal
> org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null ->
> [Help 1]
> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute
> goal org.apache.rat:apache-rat-plugin:0.18:check (default) on project
> inception-io-tei: Execution default of goal
> org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2
> (MojoExecutor.java:333)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583)
> Caused by: org.apache.maven.plugin.PluginExecutionException: Execution
> default of goal org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot
> invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo
> (DefaultBuildPluginManager.java:133)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583)
> Caused by: java.lang.NullPointerException: Cannot invoke
> "org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
> because the return value of "java.util.SortedMap.get(Object)" is null
> at
> org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder.build
> (AbstractFileProcessorBuilder.java:133)
> at
> org.apache.rat.config.exclusion.ExclusionProcessor.lambda$extractFileProcessors$0
> (ExclusionProcessor.java:232)
> at org.apache.commons.collections4.Transformer.apply (Transformer.java:47)
> at org.apache.commons.collections4.iterators.TransformIterator.transform
> (TransformIterator.java:138)
> at org.apache.commons.collections4.iterators.TransformIterator.next
> (TransformIterator.java:102)
> at java.util.Iterator.forEachRemaining (Iterator.java:133)
> at org.apache.rat.utils.ExtendedIterator.forEachRemaining
> (ExtendedIterator.java:130)
> at
> org.apache.rat.config.exclusion.ExclusionProcessor.extractFileProcessors
> (ExclusionProcessor.java:234)
> at org.apache.rat.config.exclusion.ExclusionProcessor.getNameMatcher
> (ExclusionProcessor.java:208)
> at org.apache.rat.ReportConfiguration.getDocumentExcluder
> (ReportConfiguration.java:434)
> at org.apache.rat.mp.AbstractRatMojo.getConfiguration
> (AbstractRatMojo.java:546)
> at org.apache.rat.mp.RatCheckMojo.getConfiguration (RatCheckMojo.java:166)
> at org.apache.rat.mp.RatCheckMojo.execute (RatCheckMojo.java:205)
> 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.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:193)
> at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
> (MultiThreadedBuilder.java:180)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:572)
> at java.util.concurrent.FutureTask.run (FutureTask.java:317)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1144)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:642)
> at java.lang.Thread.run (Thread.java:1583){noformat}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)