[
https://issues.apache.org/jira/browse/MNG-8711?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17948209#comment-17948209
]
Vasilii Gulevich edited comment on MNG-8711 at 4/29/25 4:07 PM:
----------------------------------------------------------------
To ensure that the problem is indeed fixed, I've came up with a following test
(to be pasted in
impl/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolverTest.java):
{code:java}
@Test
void testResolutionWithoutFiltering() throws Exception {
MavenSession session = createMavenSession(
new
File("src/test/projects/lifecycle-dependency-resolver/pom.xml"), new
Properties(), true);
Collection<String> scopesToCollect = null;
Collection<String> scopesToResolve =
Collections.singletonList("compile");
boolean aggregating = false;
for (MavenProject reactorProject : session.getProjects()) {
reactorProject.setArtifactFilter(artifact -> true);
resolver.resolveProjectDependencies(
reactorProject, scopesToCollect, scopesToResolve, session,
aggregating, Collections.emptySet()); // unexpectedly throws
}
}
{code}
Notice that last argument is a set of visited artifacts emulating an obsolete
state of a different thread.
The test fails with:
{code:java}
[ERROR]
org.apache.maven.lifecycle.internal.LifecycleDependencyResolverTest.testResolutionWithoutFiltering
-- Time elapsed: 0.032 s <<< ERROR!
org.apache.maven.lifecycle.LifecycleExecutionException:
Failed to execute goal on project mng6300-war: Could not resolve dependencies
for project org.apache.maven.its.mng6300:mng6300-war:war:1.0
dependency: org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (compile)
Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
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.LifecycleDependencyResolverTest.testResolutionWithoutFiltering(LifecycleDependencyResolverTest.java:148)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not
resolve dependencies for project
org.apache.maven.its.mng6300:mng6300-war:war:1.0
dependency: org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (compile)
Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:191)
at
org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:260)
... 6 more
Caused by: org.eclipse.aether.resolution.DependencyResolutionException: The
following artifacts could not be resolved:
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (absent): Could not find
artifac
t org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:312)
at
org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:186)
... 7 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: The
following artifacts could not be resolved:
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (absent): Could not find
artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:424)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:201)
at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:299)
... 8 more
Suppressed: org.eclipse.aether.resolution.ArtifactResolutionException:
Failed to resolve artifact org.apache.maven.its.mng6300:mng6300-lib:jar:1.0
at
org.eclipse.aether.resolution.ArtifactResolutionException.getSuppressed(ArtifactResolutionException.java:185)
at
org.eclipse.aether.resolution.ArtifactResolutionException.<init>(ArtifactResolutionException.java:47)
... 11 more
Suppressed:
org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/ma
ven-core/src/test/remote-repo/)
at
org.apache.maven.repository.TestRepositoryConnector.get(TestRepositoryConnector.java:83)
at
org.eclipse.aether.internal.impl.offline.OfflineRepositoryConnector.get(OfflineRepositoryConnector.java:82)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:490)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:399)
... 10 more
Caused by: [CIRCULAR REFERENCE:
org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich
/git/maven/impl/maven-core/src/test/remote-repo/)]{code}
This failure indicates that the fix in itself is not enough to eliminate the
race of artifact resolution. There are might be some different protections in
place, but it will take time to ensure they are present and tested.
So far, I'm not confident enough to proceed with backport by myself.
was (Author: JIRAUSER309537):
To ensure that the problem is indeed fixed, I've came up with a following test
(to be pasted in
impl/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolverTest.java):
{code:java}
@Test
void testResolutionWithoutFiltering() throws Exception {
MavenSession session = createMavenSession(
new
File("src/test/projects/lifecycle-dependency-resolver/pom.xml"), new
Properties(), true);
Collection<String> scopesToCollect = null;
Collection<String> scopesToResolve =
Collections.singletonList("compile");
boolean aggregating = false;
for (MavenProject reactorProject : session.getProjects()) {
reactorProject.setArtifactFilter(artifact -> true);
resolver.resolveProjectDependencies(
reactorProject, scopesToCollect, scopesToResolve, session,
aggregating, Collections.emptySet()); // unexpectedly throws
}
}
{code}
Notice that last argument is a set of visited artifacts emulating an obsolete
state of a different thread.
The test fails with:
{code:java}
[ERROR]
org.apache.maven.lifecycle.internal.LifecycleDependencyResolverTest.testResolutionWithoutFiltering
-- Time elapsed: 0.032 s <<< ERROR!
org.apache.maven.lifecycle.LifecycleExecutionException:
Failed to execute goal on project mng6300-war: Could not resolve dependencies
for project org.apache.maven.its.mng6300:mng6300-war:war:1.0
dependency: org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (compile)
Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
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.LifecycleDependencyResolverTest.testResolutionWithoutFiltering(LifecycleDependencyResolverTest.java:148)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not
resolve dependencies for project
org.apache.maven.its.mng6300:mng6300-war:war:1.0
dependency: org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (compile)
Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:191)
at
org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:260)
... 6 more
Caused by: org.eclipse.aether.resolution.DependencyResolutionException: The
following artifacts could not be resolved:
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (absent): Could not find
artifac
t org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:312)
at
org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:186)
... 7 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: The
following artifacts could not be resolved:
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 (absent): Could not find
artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/maven-core/src/test/remote-repo/)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:424)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:201)
at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:299)
... 8 more
Suppressed: org.eclipse.aether.resolution.ArtifactResolutionException:
Failed to resolve artifact org.apache.maven.its.mng6300:mng6300-lib:jar:1.0
at
org.eclipse.aether.resolution.ArtifactResolutionException.getSuppressed(ArtifactResolutionException.java:185)
at
org.eclipse.aether.resolution.ArtifactResolutionException.<init>(ArtifactResolutionException.java:47)
... 11 more
Suppressed:
org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich/git/maven/impl/ma
ven-core/src/test/remote-repo/)
at
org.apache.maven.repository.TestRepositoryConnector.get(TestRepositoryConnector.java:83)
at
org.eclipse.aether.internal.impl.offline.OfflineRepositoryConnector.get(OfflineRepositoryConnector.java:82)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:490)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:399)
... 10 more
Caused by: [CIRCULAR REFERENCE:
org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact
org.apache.maven.its.mng6300:mng6300-lib:jar:1.0 in central
(file:///Users/vasiligulevich
/git/maven/impl/maven-core/src/test/remote-repo/)]{code}
This failure indicates that the fix in itself is not enough to eliminate the
race or artifact resolution. There are might be some different protections in
place, but it will take time to ensure they are present and tested.
So far, I'm not confident enough to proceed with backport by myself.
> "Duplicate artifact" in LifecycleDependencyResolver
> ---------------------------------------------------
>
> Key: MNG-8711
> URL: https://issues.apache.org/jira/browse/MNG-8711
> Project: Maven
> Issue Type: Bug
> Components: Core
> Affects Versions: 3.9.9
> Reporter: Vasilii Gulevich
> Priority: Major
> Labels: backport
> Fix For: 3.9.10
>
>
> When building a multimodule project with "--threads=10" argument, following
> exception happens:
> {code:java}
> java.lang.IllegalStateException: Duplicate artifact resolution result for
> project org.eclipse.rcptt:ecl:2.6.0-SNAPSHOT
> at
> org.apache.maven.project.artifact.DefaultProjectArtifactsCache.assertUniqueKey
> (DefaultProjectArtifactsCache.java:207)
> at org.apache.maven.project.artifact.DefaultProjectArtifactsCache.put
> (DefaultProjectArtifactsCache.java:196)
> at
> org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies
> (LifecycleDependencyResolver.java:138)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved
> (MojoExecutor.java:368)
> at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute
> (MojoExecutor.java:313)
> 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 io.takari.maven.builder.smart.SmartBuilderImpl.buildProject
> (SmartBuilderImpl.java:206)
> at io.takari.maven.builder.smart.SmartBuilderImpl$ProjectBuildTask.run
> (SmartBuilderImpl.java:71)
> 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) {code}
> This is already fixed in [https://github.com/apache/maven/pull/1425], but is
> not backported to 3.9.x.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)