This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch maven-3.8.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.8.x by this push:
     new ad74f9eb8 [MNG-7720] Wrong build order of forked projects (#1039)
ad74f9eb8 is described below

commit ad74f9eb868b4002ad8e580adc46d00d664b06a2
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Mar 8 09:04:11 2023 +0100

    [MNG-7720] Wrong build order of forked projects (#1039)
    
    The original fix MNG-7672 matched the "scope" but missed the "order". 
`project.collectedProjects` are in order as loaded (POM order), is not 
topologically sorted.
    
    Fix is to use DAG of projects, ask for downstream projects (will return 
more then we need but sorted) and narrow that list to only contain collected 
projects.
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-7720
---
 .../lifecycle/internal/LifecycleDependencyResolver.java  | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
index a4dcbf14d..53f7951b3 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -97,9 +98,18 @@ public class LifecycleDependencyResolver
     {
         if ( aggregator && project.getCollectedProjects() != null )
         {
-            List<MavenProject> projects = new ArrayList<>();
-            addProjectAndSubModules( projects, project );
-            return projects;
+            List<MavenProject> sortedProjects = new ArrayList<>( 
session.getProjects() ); // sorted but all
+            List<MavenProject> projectAndSubmodules = new ArrayList<>();
+            addProjectAndSubModules( projectAndSubmodules, project ); // not 
sorted but what we need
+            Iterator<MavenProject> sortedProjectsIterator = 
sortedProjects.listIterator();
+            while ( sortedProjectsIterator.hasNext() )
+            {
+                if ( !projectAndSubmodules.contains( 
sortedProjectsIterator.next() ) )
+                {
+                    sortedProjectsIterator.remove();
+                }
+            }
+            return sortedProjects;
         }
         else
         {

Reply via email to