[ 
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 5/18/25 2:50 PM:
----------------------------------------------------------------

To ensure that the problem is indeed fixed, I 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 empty, just like it would be in 
org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoDescriptor,
 MavenSession, DependencyContext)

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}
The test was initially multi-threaded, but the failure is reproducible in a 
single thread.

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.

The only existing test in LifecycleDependencyResolverTest.java hides the 
problem by manipulating the last argument in a manner that is not done in a 
real code (as far as my search over codebase shows).

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 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 empty, just like it would be in 
org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoDescriptor,
 MavenSession, DependencyContext)

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.

The only existing test in LifecycleDependencyResolverTest.java hides the 
problem by manipulating the last argument in a manner that is not done in a 
real code (as far as my search over codebase shows).

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
>            Assignee: Slawomir Jaranowski
>            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)

Reply via email to