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

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


The following commit(s) were added to refs/heads/master by this push:
     new 1ffd68b80 [MNG-7720] Wrong build order of forked projects (#1040)
1ffd68b80 is described below

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

    [MNG-7720] Wrong build order of forked projects (#1040)
    
    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
---
 .../maven/lifecycle/internal/LifecycleDependencyResolver.java | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 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 fa3564b55..62cd8c8ce 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
@@ -90,7 +90,11 @@ public class LifecycleDependencyResolver {
 
     public static List<MavenProject> getProjects(MavenProject project, 
MavenSession session, boolean aggregator) {
         if (aggregator && project.getCollectedProjects() != null) {
-            return 
getProjectAndSubModules(project).collect(Collectors.toList());
+            List<MavenProject> projectAndSubmodules =
+                    
getProjectAndSubModules(project).collect(Collectors.toList()); // not sorted 
but what we need
+            return session.getProjects().stream() // sorted all
+                    .filter(projectAndSubmodules::contains)
+                    .collect(Collectors.toList()); // sorted and filtered to 
what we need
         } else {
             return Collections.singletonList(project);
         }
@@ -99,7 +103,10 @@ public class LifecycleDependencyResolver {
     private static Stream<MavenProject> getProjectAndSubModules(MavenProject 
project) {
         return Stream.concat(
                 Stream.of(project),
-                
project.getCollectedProjects().stream().flatMap(LifecycleDependencyResolver::getProjectAndSubModules));
+                project.getCollectedProjects() == null
+                        ? Stream.empty()
+                        : project.getCollectedProjects().stream()
+                                
.flatMap(LifecycleDependencyResolver::getProjectAndSubModules));
     }
 
     public void resolveProjectDependencies(

Reply via email to