This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.9.x by this push:
new 57acdd41b [MNG-7720] Wrong build order of forked projects (#1038)
57acdd41b is described below
commit 57acdd41b46dbf7ed4a762643d5705c0acc8af2d
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Mar 8 09:03:33 2023 +0100
[MNG-7720] Wrong build order of forked projects (#1038)
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.
Related commit: 48cac1c003fdc409e8c455c21fcba07050393b0c
---
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 699d70477..973b798c6 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(