Skip to content

[MNG-8418] regression: maven 4: Duplicate key default #9435

Closed as duplicate of#10209
@jira-importer

Description

@jira-importer

Jörg Hohwiller opened MNG-8418 and commented

I am testing migration of a complex project (600+ modules) to maven 4.0.

While I am fully aware that maven 4.0.0-rc1 is not supposed to be production ready, I already want to do further testing to report blockers from real-life projects that could prevent a smooth upgrade from maven 3 (3.9.9) to maven 4 (once 4.0.0 official release is published).

The build (invocation was {}mvn install -DskipTests -X{}) is working with maven 3 (tested with 3.8.6, 3.9.6 and 3.9.9) but it failes with maven 4 (also with latest 4.0.0-rc-1):

[ERROR] Failed to execute goal on project myproject.foundation.client: Could not collect dependencies for project com.customer:myproject.foundation.client:jar:4.25.2.0-SNAPSHOT
[ERROR] java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
[ERROR]         Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
[ERROR] java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
[ERROR]         Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
[ERROR] : Failed to collect dependencies at com.customer.mylibrary:mylibrary-clientcomponents:jar:3.39.0.0 -> com.miglayout:miglayout:jar:3.7.2
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project myproject.foundation.client: Could not collect dependencies for project com.customer:myproject.foundation.client:jar:4.25.2.0-SNAPSHOT
java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
        Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
        Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:279)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectArtifacts(LifecycleDependencyResolver.java:208)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:128)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:368)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:307)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:214)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:179)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:168)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute(BuildCacheMojosExecutionStrategy.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:107)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder.lambda$createBuildCallable$1(MultiThreadedBuilder.java:191)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:840)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not collect dependencies for project com.customer:myproject.foundation.client:jar:4.25.2.0-SNAPSHOT
java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
        Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
        Caused by: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:163)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:260)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectArtifacts(LifecycleDependencyResolver.java:208)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:128)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:368)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:307)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:214)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:179)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:168)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute(BuildCacheMojosExecutionStrategy.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:107)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder.lambda$createBuildCallable$1(MultiThreadedBuilder.java:191)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:840)
Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to collect dependencies at com.customer.mylibrary:mylibrary-clientcomponents:jar:3.39.0.0 -> com.miglayout:miglayout:jar:3.7.2
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:260)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:79)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:241)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:156)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:260)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectArtifacts(LifecycleDependencyResolver.java:208)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:128)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:368)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:307)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:214)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:179)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:168)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute(BuildCacheMojosExecutionStrategy.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:107)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder.lambda$createBuildCallable$1(MultiThreadedBuilder.java:191)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:840)
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.processDependency(BfDependencyCollector.java:237)
    at org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.doCollectDependencies(BfDependencyCollector.java:202)
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:222)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:79)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:241)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:156)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:260)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectArtifacts(LifecycleDependencyResolver.java:208)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:128)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:368)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:307)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:214)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:179)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:168)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute(BuildCacheMojosExecutionStrategy.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:107)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder.lambda$createBuildCallable$1(MultiThreadedBuilder.java:191)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: Duplicate key default (attempted merging values org.apache.maven.api.model.Activation@1556c428 and org.apache.maven.api.model.Activation@62ed65df)
    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.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:720)
    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.internal.impl.model.DefaultModelBuilder.getProfileActivations(DefaultModelBuilder.java:1878)
    at org.apache.maven.internal.impl.model.DefaultModelBuilder$ModelBuilderSessionState.activateFileModel(DefaultModelBuilder.java:1135)
    at org.apache.maven.internal.impl.model.DefaultModelBuilder$ModelBuilderSessionState.readEffectiveModel(DefaultModelBuilder.java:1154)
    at org.apache.maven.internal.impl.model.DefaultModelBuilder$ModelBuilderSessionState.buildEffectiveModel(DefaultModelBuilder.java:807)
    at org.apache.maven.internal.impl.model.DefaultModelBuilder$ModelBuilderSessionImpl.build(DefaultModelBuilder.java:231)
    at org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:207)
    at org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:103)
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.resolveCachedArtifactDescriptor(DependencyCollectorDelegate.java:484)
    at org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.resolveDescriptorForVersion(BfDependencyCollector.java:463)
    at org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.lambda$resolveArtifactDescriptorAsync$1(BfDependencyCollector.java:437)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.lambda$resolveArtifactDescriptorAsync$4(BfDependencyCollector.java:436)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:840)
[ERROR]
[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/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn [args] -r
[DEBUG] Shutting down adapter factory; available factories [file-lock, rwlock-local, semaphore-local, noop]; available name mappers [discriminating, file-gav, file-hgav, file-static, gav, static]
[DEBUG] Shutting down 'file-lock' factory
[DEBUG] Shutting down 'rwlock-local' factory
[DEBUG] Shutting down 'semaphore-local' factory
[DEBUG] Shutting down 'noop' factory 

I already checked the POM of {}mylibrary-clientcomponents:jar:3.39.0.0{}. There are 4 parent POMs involved from where the dependency to com.miglayout:miglayout:jar:3.7.2 is defined but it is not duplicated anywhere. Since the error indicates activations that IMHO only exist in profiles I also checked all profiles with activations. All profiles share a unique ID. The activations in the mylibrary POMs are always:

<activation>
  <activeByDefault>false</activeByDefault>
</activation> 

In the myproject.foundation.client:jar:4.25.2.0-SNAPSHOT POM there is also a profile with a different ID that has this activation:

    <profile>
      <id>macos</id>
      <activation>
        <os>
          <family>mac</family>
        </os>
      </activation>
      ... 

First thing that comes to my mind would be to implement a helpful implementation of toString() for {}org.apache.maven.api.model.Activation{}.
NOTE: This issue is not related to concurrency/threading (no -T option).

The bug comes from here:

return model.getProfiles().stream()
.filter(p -> p.getActivation() != null)
.collect(Collectors.toMap(Profile::getId, Profile::getActivation));

Since the code already changed on master for rc2 you can immediately close this issue, but I could not find a MNG bug issue for "Duplicate key default".


Affects: 4.0.0-rc-1

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority:majorMajor loss of function

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions