You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@creadur.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2026/08/06 09:06:00 UTC
[jira] [Commented] (RAT-553) NPE with multi-threaded builds during SCM ignore parsing (Hg/Git)
[ https://issues.apache.org/jira/browse/RAT-553?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18102373#comment-18102373 ]
ASF subversion and git services commented on RAT-553:
-----------------------------------------------------
Commit 04b752f65f9e81265029e6a059579fcbe3ad9333 in creadur-rat's branch refs/heads/UIOption_update from P. Ottlinger
[ https://gitbox.apache.org/repos/asf?p=creadur-rat.git;h=04b752f6 ]
RAT-573, RAT-553: Merge pull request #704 from gnodet/quick-fix/thread-safe-default-log
RAT-573: Make RAT safe for parallel Maven builds
> NPE with multi-threaded builds during SCM ignore parsing (Hg/Git)
> -----------------------------------------------------------------
>
> Key: RAT-553
> URL: https://issues.apache.org/jira/browse/RAT-553
> Project: Apache RAT
> Issue Type: Bug
> Affects Versions: 0.18
> Reporter: Richard Eckart de Castilho
> Assignee: Guillaume Nodet
> 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)