[
https://issues.apache.org/jira/browse/MBUILDCACHE-44?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Olivier Lamy closed MBUILDCACHE-44.
-----------------------------------
Resolution: Fixed
> Running duplicate maven phase leads to IllegalStateException and cache miss
> ---------------------------------------------------------------------------
>
> Key: MBUILDCACHE-44
> URL: https://issues.apache.org/jira/browse/MBUILDCACHE-44
> Project: Maven Build Cache Extension
> Issue Type: Bug
> Affects Versions: 1.0.0
> Reporter: Miguel Ortega
> Priority: Minor
> Labels: pull-request-available
> Fix For: 1.0.1
>
> Attachments: maven-cache.zip
>
>
> When running maven with a duplicate maven goal like below (i'm aware that
> compile phase here is not necessary)
> {code:java}
> mvn compile test
> {code}
> the plugin seems to create a cache key that cause an error if i call.
> {code:java}
> mvn test
> {code}
> This will cause the following error:
> {code:java}
> [ERROR] Failed to restore project
> java.lang.IllegalStateException: Duplicate key
> default-resources:resources:process-resources:maven-resources-plugin:org.apache.maven.plugins
> (attempted merging values
> org.apache.maven.buildcache.xml.build.CompletedExecution@1e1b061 and
> org.apache.maven.buildcache.xml.build.CompletedExecution@38f77cd9)
> at java.util.stream.Collectors.duplicateKeyException (Collectors.java:135)
> at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1
> (Collectors.java:182)
> at java.util.stream.ReduceOps$3ReducingSink.accept (ReduceOps.java:169)
> at java.util.ArrayList$ArrayListSpliterator.forEachRemaining
> (ArrayList.java:1625)
> at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
> at java.util.stream.AbstractPipeline.wrapAndCopyInto
> (AbstractPipeline.java:499)
> at java.util.stream.ReduceOps$ReduceOp.evaluateSequential
> (ReduceOps.java:921)
> at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
> at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
> at org.apache.maven.buildcache.xml.Build.getExecutionMap (Build.java:198)
> at org.apache.maven.buildcache.xml.Build.hasCompletedExecution
> (Build.java:116)
> at org.apache.maven.buildcache.xml.Build.lambda$getMissingExecutions$0
> (Build.java:110)
> at java.util.stream.ReferencePipeline$2$1.accept
> (ReferencePipeline.java:178)
> at java.util.ArrayList$ArrayListSpliterator.forEachRemaining
> (ArrayList.java:1625)
> at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
> at java.util.stream.AbstractPipeline.wrapAndCopyInto
> (AbstractPipeline.java:499)
> at java.util.stream.ReduceOps$ReduceOp.evaluateSequential
> (ReduceOps.java:921)
> at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
> at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
> at org.apache.maven.buildcache.xml.Build.getMissingExecutions
> (Build.java:111)
> at org.apache.maven.buildcache.CacheControllerImpl.analyzeResult
> (CacheControllerImpl.java:267)
> at org.apache.maven.buildcache.CacheControllerImpl.findLocalBuild
> (CacheControllerImpl.java:234)
> at org.apache.maven.buildcache.CacheControllerImpl.findCachedBuild
> (CacheControllerImpl.java:185)
> at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute
> (BuildCacheMojosExecutionStrategy.java:114)
> at org.apache.maven.lifecycle.internal.MojoExecutor.execute
> (MojoExecutor.java:160)
> 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:260)
> at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
> at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
> at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
> at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
> at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:77)
> at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke (Method.java:568)
> at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced
> (Launcher.java:282)
> at org.codehaus.plexus.classworlds.launcher.Launcher.launch
> (Launcher.java:225)
> at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode
> (Launcher.java:406)
> at org.codehaus.plexus.classworlds.launcher.Launcher.main
> (Launcher.java:347)
> {code}
>
> *+Steps to reproduce:+*
> * From a simple maven project (repo project attached), with clean cache, run
> duplicate phase `mvn compile test`
> * Then run `mvn test`
> * -> An exception is thown and no cache is used
> * Running either of the commands again work as expected
> +*Expected Behaviour:*+
> Even in case of wrong user input like in this example, i guess i would expect:
> * A cache to not throw exception an reuse the 'test' cache from the first
> command
> * Or a more explicit error to explain severity or resolution to the user
> Environment:
> {noformat}
> Apache Maven 3.9.0 (9b58d2bad23a66be161c4664ef21ce219c2c8584)
> Maven home: <REDACTED>
> Java version: 17.0.1, vendor: Eclipse Adoptium, runtime:
> C:\<REDACTED>\jdk-17.0.1.12-hotspot
> Default locale: fr_FR, platform encoding: Cp1252
> OS name: "windows 10", version: "10.0", arch: "amd64", family:
> "windows"{noformat}
> +*Suggested source problem & fix*+
> The source problem seems to be that method "buildExecutionInfo" can return a
> list with duplicate "CompletedExecution" (same execution key)
> My suggested fix would be to either to deduplicate the "CompletedExecution" by
> "executionKey" CacheControllerImpl.buildExecutionInfo or change the unicity
> key for
> CompletedExecution.
> I could work on a PR if bug is confirmed and suggested fix is validated.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)