This is an automated email from the ASF dual-hosted git repository. gnodet 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 5baa2f4098 [MNG-7977] Fix reactor reader to not resolve any artifacts from projects being built outside the reactor (#1330) 5baa2f4098 is described below commit 5baa2f40985cbcb7398f545487b45c3069bacd32 Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon Jan 8 11:38:13 2024 +0100 [MNG-7977] Fix reactor reader to not resolve any artifacts from projects being built outside the reactor (#1330) --- .../main/java/org/apache/maven/ReactorReader.java | 47 +++++++++++++++------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/ReactorReader.java b/maven-core/src/main/java/org/apache/maven/ReactorReader.java index f22fd06d22..8bb0660d0d 100644 --- a/maven-core/src/main/java/org/apache/maven/ReactorReader.java +++ b/maven-core/src/main/java/org/apache/maven/ReactorReader.java @@ -29,16 +29,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; -import java.util.ArrayDeque; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Deque; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -78,6 +69,7 @@ class ReactorReader implements MavenWorkspaceReader { private final WorkspaceRepository repository; // groupId -> (artifactId -> (version -> project))) private Map<String, Map<String, Map<String, MavenProject>>> projects; + private Map<String, Map<String, Map<String, MavenProject>>> allProjects; private Path projectLocalRepository; // projectId -> Deque<lifecycle> private final Map<String, Deque<String>> lifecycles = new ConcurrentHashMap<>(); @@ -117,7 +109,17 @@ class ReactorReader implements MavenWorkspaceReader { } public List<String> findVersions(Artifact artifact) { - return getProjects() + List<String> versions = getProjects() + .getOrDefault(artifact.getGroupId(), Collections.emptyMap()) + .getOrDefault(artifact.getArtifactId(), Collections.emptyMap()) + .values() + .stream() + .map(MavenProject::getVersion) + .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); + if (!versions.isEmpty()) { + return versions; + } + return getAllProjects() .getOrDefault(artifact.getGroupId(), Collections.emptyMap()) .getOrDefault(artifact.getArtifactId(), Collections.emptyMap()) .values() @@ -452,22 +454,39 @@ class ReactorReader implements MavenWorkspaceReader { } private MavenProject getProject(Artifact artifact) { - return getProjects() + return getAllProjects() .getOrDefault(artifact.getGroupId(), Collections.emptyMap()) .getOrDefault(artifact.getArtifactId(), Collections.emptyMap()) .getOrDefault(artifact.getBaseVersion(), null); } // groupId -> (artifactId -> (version -> project))) - private Map<String, Map<String, Map<String, MavenProject>>> getProjects() { + private Map<String, Map<String, Map<String, MavenProject>>> getAllProjects() { // compute the projects mapping - if (projects == null) { + if (allProjects == null) { List<MavenProject> allProjects = session.getAllProjects(); if (allProjects != null) { Map<String, Map<String, Map<String, MavenProject>>> map = new HashMap<>(); allProjects.forEach(project -> map.computeIfAbsent(project.getGroupId(), k -> new HashMap<>()) .computeIfAbsent(project.getArtifactId(), k -> new HashMap<>()) .put(project.getVersion(), project)); + this.allProjects = map; + } else { + return Collections.emptyMap(); + } + } + return allProjects; + } + + private Map<String, Map<String, Map<String, MavenProject>>> getProjects() { + // compute the projects mapping + if (projects == null) { + List<MavenProject> projects = session.getProjects(); + if (projects != null) { + Map<String, Map<String, Map<String, MavenProject>>> map = new HashMap<>(); + projects.forEach(project -> map.computeIfAbsent(project.getGroupId(), k -> new HashMap<>()) + .computeIfAbsent(project.getArtifactId(), k -> new HashMap<>()) + .put(project.getVersion(), project)); this.projects = map; } else { return Collections.emptyMap();