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 2cccc0a476 [MNG-7966] Augment api to provide a Map<Dependency, Path>
in the resolution result (#1343)
2cccc0a476 is described below
commit 2cccc0a476d98123140e6265d8bd5cc36ccfe414
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Dec 15 07:34:19 2023 +0100
[MNG-7966] Augment api to provide a Map<Dependency, Path> in the resolution
result (#1343)
---
.../api/services/DependencyResolverResult.java | 7 +-
.../internal/impl/DefaultArtifactDeployer.java | 10 +--
.../internal/impl/DefaultArtifactResolver.java | 12 +--
.../internal/impl/DefaultDependencyCollector.java | 12 +--
.../internal/impl/DefaultDependencyResolver.java | 91 +++++++++++++---------
.../internal/LifecycleDependencyResolver.java | 22 +++++-
.../internal/SetWithResolutionResult.java | 54 +++++++++++++
.../artifact/DefaultProjectArtifactsCache.java | 35 ++++-----
.../project/artifact/ProjectArtifactsCache.java | 21 +++--
.../artifact/DefaultProjectArtifactsCacheTest.java | 5 +-
10 files changed, 172 insertions(+), 97 deletions(-)
diff --git
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
index 4ca074dfbf..7932438500 100644
---
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
+++
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
@@ -20,7 +20,9 @@ package org.apache.maven.api.services;
import java.nio.file.Path;
import java.util.List;
+import java.util.Map;
+import org.apache.maven.api.Dependency;
import org.apache.maven.api.Node;
import org.apache.maven.api.annotations.Experimental;
import org.apache.maven.api.annotations.Nonnull;
@@ -32,8 +34,11 @@ public interface DependencyResolverResult extends
DependencyCollectorResult {
* The ordered list of the flattened dependency nodes.
*/
@Nonnull
- List<Node> getDependencies();
+ List<Node> getNodes();
@Nonnull
List<Path> getPaths();
+
+ @Nonnull
+ Map<Dependency, Path> getDependencies();
}
diff --git
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
index 62d02f0cf2..d9f6dec6e3 100644
---
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
+++
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
@@ -18,7 +18,6 @@
*/
package org.apache.maven.internal.impl;
-import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -30,7 +29,6 @@ import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.services.ArtifactDeployer;
import org.apache.maven.api.services.ArtifactDeployerException;
import org.apache.maven.api.services.ArtifactDeployerRequest;
-import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.deployment.DeployRequest;
import org.eclipse.aether.deployment.DeployResult;
import org.eclipse.aether.deployment.DeploymentException;
@@ -43,12 +41,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
@Named
@Singleton
public class DefaultArtifactDeployer implements ArtifactDeployer {
- private final @Nonnull RepositorySystem repositorySystem;
-
- @Inject
- DefaultArtifactDeployer(@Nonnull RepositorySystem repositorySystem) {
- this.repositorySystem = nonNull(repositorySystem, "repositorySystem");
- }
@Override
public void deploy(@Nonnull ArtifactDeployerRequest request) {
@@ -61,7 +53,7 @@ public class DefaultArtifactDeployer implements
ArtifactDeployer {
.setRepository(session.toRepository(repository))
.setArtifacts(session.toArtifacts(artifacts));
- DeployResult result =
repositorySystem.deploy(session.getSession(), deployRequest);
+ DeployResult result =
session.getRepositorySystem().deploy(session.getSession(), deployRequest);
} catch (DeploymentException e) {
throw new ArtifactDeployerException("Unable to deploy artifacts",
e);
}
diff --git
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
index 0e9f723fab..4eb78b49a9 100644
---
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
+++
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
@@ -18,7 +18,6 @@
*/
package org.apache.maven.internal.impl;
-import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -30,13 +29,11 @@ import java.util.Map;
import org.apache.maven.api.Artifact;
import org.apache.maven.api.ArtifactCoordinate;
-import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.services.ArtifactManager;
import org.apache.maven.api.services.ArtifactResolver;
import org.apache.maven.api.services.ArtifactResolverException;
import org.apache.maven.api.services.ArtifactResolverRequest;
import org.apache.maven.api.services.ArtifactResolverResult;
-import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
@@ -47,12 +44,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
@Named
@Singleton
public class DefaultArtifactResolver implements ArtifactResolver {
- private final RepositorySystem repositorySystem;
-
- @Inject
- DefaultArtifactResolver(@Nonnull RepositorySystem repositorySystem) {
- this.repositorySystem = nonNull(repositorySystem, "repositorySystem");
- }
@Override
public ArtifactResolverResult resolve(ArtifactResolverRequest request)
@@ -75,7 +66,8 @@ public class DefaultArtifactResolver implements
ArtifactResolver {
}
}
if (!requests.isEmpty()) {
- List<ArtifactResult> results =
repositorySystem.resolveArtifacts(session.getSession(), requests);
+ List<ArtifactResult> results =
+
session.getRepositorySystem().resolveArtifacts(session.getSession(), requests);
for (ArtifactResult result : results) {
Artifact artifact =
session.getArtifact(result.getArtifact());
Path path = result.getArtifact().getFile().toPath();
diff --git
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
index f3d2d5ff98..49b5dc4bde 100644
---
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
+++
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
@@ -18,7 +18,6 @@
*/
package org.apache.maven.internal.impl;
-import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -31,7 +30,6 @@ import
org.apache.maven.api.services.DependencyCollectorException;
import org.apache.maven.api.services.DependencyCollectorRequest;
import org.apache.maven.api.services.DependencyCollectorResult;
import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.collection.CollectRequest;
@@ -47,13 +45,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
@Singleton
public class DefaultDependencyCollector implements DependencyCollector {
- private final RepositorySystem repositorySystem;
-
- @Inject
- DefaultDependencyCollector(@Nonnull RepositorySystem repositorySystem) {
- this.repositorySystem = repositorySystem;
- }
-
@Nonnull
@Override
public DependencyCollectorResult collect(@Nonnull
DependencyCollectorRequest request)
@@ -79,7 +70,8 @@ public class DefaultDependencyCollector implements
DependencyCollector {
}
try {
- final CollectResult result =
repositorySystem.collectDependencies(systemSession, collectRequest);
+ final CollectResult result =
+
session.getRepositorySystem().collectDependencies(systemSession,
collectRequest);
return new DependencyCollectorResult() {
@Override
public List<Exception> getExceptions() {
diff --git
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
index bd6880d3d2..957f3d5cd2 100644
---
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
+++
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
@@ -18,7 +18,6 @@
*/
package org.apache.maven.internal.impl;
-import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -26,15 +25,17 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
-import org.apache.maven.RepositoryUtils;
import org.apache.maven.api.Artifact;
import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.Dependency;
import org.apache.maven.api.Node;
import org.apache.maven.api.Project;
import org.apache.maven.api.ResolutionScope;
@@ -43,8 +44,8 @@ import org.apache.maven.api.Session;
import org.apache.maven.api.services.*;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver;
+import org.apache.maven.project.DependencyResolutionResult;
import org.apache.maven.project.MavenProject;
-import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.graph.DependencyVisitor;
@@ -59,9 +60,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
@Singleton
public class DefaultDependencyResolver implements DependencyResolver {
- @Inject
- public DefaultDependencyResolver() {}
-
@Override
public List<Node> flatten(Session s, Node node, ResolutionScope scope)
throws DependencyResolverException {
InternalSession session = InternalSession.from(s);
@@ -81,7 +79,7 @@ public class DefaultDependencyResolver implements
DependencyResolver {
private static DependencyFilter getScopeDependencyFilter(ResolutionScope
scope) {
Set<String> scopes =
scope.scopes().stream().map(Scope::id).collect(Collectors.toSet());
return (n, p) -> {
- Dependency d = n.getDependency();
+ org.eclipse.aether.graph.Dependency d = n.getDependency();
return d == null || scopes.contains(d.getScope());
};
}
@@ -93,51 +91,59 @@ public class DefaultDependencyResolver implements
DependencyResolver {
InternalSession session = InternalSession.from(request.getSession());
if (request.getProject().isPresent()) {
- List<Artifact> artifacts = resolveDependencies(
+ DependencyResolutionResult result = resolveDependencies(
request.getSession(), request.getProject().get(),
request.getResolutionScope());
- List<Path> paths = artifacts.stream()
- .map(a -> request.getSession()
- .getService(ArtifactManager.class)
- .getPath(a)
- .get())
- .collect(Collectors.toList());
- return new
DefaultDependencyResolverResult(Collections.emptyList(), null,
Collections.emptyList(), paths);
+
+ Map<org.eclipse.aether.graph.Dependency,
org.eclipse.aether.graph.DependencyNode> nodes = stream(
+ result.getDependencyGraph())
+ .filter(n -> n.getDependency() != null)
+ .collect(Collectors.toMap(DependencyNode::getDependency, n
-> n));
+
+ Node root = session.getNode(result.getDependencyGraph());
+ List<Node> dependencies = new ArrayList<>();
+ Map<Dependency, Path> artifacts = new LinkedHashMap<>();
+ List<Path> paths = new ArrayList<>();
+ for (org.eclipse.aether.graph.Dependency dep :
result.getResolvedDependencies()) {
+ dependencies.add(session.getNode(nodes.get(dep)));
+ Path path = dep.getArtifact().getFile().toPath();
+ artifacts.put(session.getDependency(dep), path);
+ paths.add(path);
+ }
+ return new DefaultDependencyResolverResult(
+ result.getCollectionErrors(), root, dependencies, paths,
artifacts);
}
DependencyCollectorResult collectorResult =
session.getService(DependencyCollector.class).collect(request);
- List<Node> dependencies = flatten(session, collectorResult.getRoot(),
request.getResolutionScope());
-
- List<ArtifactCoordinate> coordinates = dependencies.stream()
- .map(Node::getDependency)
- .filter(Objects::nonNull)
- .map(Artifact::toCoordinate)
- .collect(Collectors.toList());
+ List<Node> nodes = flatten(session, collectorResult.getRoot(),
request.getResolutionScope());
+ List<Dependency> deps =
+
nodes.stream().map(Node::getDependency).filter(Objects::nonNull).collect(Collectors.toList());
+ List<ArtifactCoordinate> coordinates =
+
deps.stream().map(Artifact::toCoordinate).collect(Collectors.toList());
Map<Artifact, Path> artifacts = session.resolveArtifacts(coordinates);
- List<Path> paths = dependencies.stream()
- .map(Node::getDependency)
- .filter(Objects::nonNull)
- .map(artifacts::get)
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
+ Map<Dependency, Path> dependencies =
deps.stream().collect(Collectors.toMap(d -> d, artifacts::get));
+ List<Path> paths = new ArrayList<>(dependencies.values());
return new DefaultDependencyResolverResult(
- collectorResult.getExceptions(), collectorResult.getRoot(),
dependencies, paths);
+ collectorResult.getExceptions(), collectorResult.getRoot(),
nodes, paths, dependencies);
}
- private List<Artifact> resolveDependencies(Session session, Project
project, ResolutionScope scope) {
+ private Stream<DependencyNode> stream(DependencyNode node) {
+ return Stream.concat(Stream.of(node),
node.getChildren().stream().flatMap(this::stream));
+ }
+
+ private DependencyResolutionResult resolveDependencies(Session session,
Project project, ResolutionScope scope) {
Collection<String> toResolve = toScopes(scope);
try {
LifecycleDependencyResolver lifecycleDependencyResolver =
session.getService(Lookup.class).lookup(LifecycleDependencyResolver.class);
- Set<org.apache.maven.artifact.Artifact> artifacts =
lifecycleDependencyResolver.resolveProjectArtifacts(
+ return
lifecycleDependencyResolver.getProjectDependencyResolutionResult(
getMavenProject(project),
toResolve,
toResolve,
InternalSession.from(session).getMavenSession(),
false,
Collections.emptySet());
- return map(artifacts, a ->
InternalSession.from(session).getArtifact(RepositoryUtils.toArtifact(a)));
} catch (LifecycleExecutionException e) {
throw new DependencyResolverException("Unable to resolve project
dependencies", e);
}
@@ -154,15 +160,21 @@ public class DefaultDependencyResolver implements
DependencyResolver {
static class DefaultDependencyResolverResult implements
DependencyResolverResult {
private final List<Exception> exceptions;
private final Node root;
- private final List<Node> dependencies;
+ private final List<Node> nodes;
private final List<Path> paths;
+ private final Map<Dependency, Path> dependencies;
DefaultDependencyResolverResult(
- List<Exception> exceptions, Node root, List<Node>
dependencies, List<Path> paths) {
+ List<Exception> exceptions,
+ Node root,
+ List<Node> nodes,
+ List<Path> paths,
+ Map<Dependency, Path> dependencies) {
this.exceptions = exceptions;
this.root = root;
- this.dependencies = dependencies;
+ this.nodes = nodes;
this.paths = paths;
+ this.dependencies = dependencies;
}
@Override
@@ -176,13 +188,18 @@ public class DefaultDependencyResolver implements
DependencyResolver {
}
@Override
- public List<Node> getDependencies() {
- return dependencies;
+ public List<Node> getNodes() {
+ return nodes;
}
@Override
public List<Path> getPaths() {
return paths;
}
+
+ @Override
+ public Map<Dependency, Path> getDependencies() {
+ return dependencies;
+ }
}
}
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 bd5fc4626b..bc571ea74a 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
@@ -169,6 +169,24 @@ public class LifecycleDependencyResolver {
}
}
+ public DependencyResolutionResult getProjectDependencyResolutionResult(
+ MavenProject project,
+ Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve,
+ MavenSession session,
+ boolean aggregating,
+ Set<Artifact> projectArtifacts)
+ throws LifecycleExecutionException {
+
+ Set<Artifact> resolvedArtifacts = resolveProjectArtifacts(
+ project, scopesToCollect, scopesToResolve, session,
aggregating, projectArtifacts);
+ if (resolvedArtifacts instanceof
ProjectArtifactsCache.ArtifactsSetWithResult) {
+ return ((ProjectArtifactsCache.ArtifactsSetWithResult)
resolvedArtifacts).getResult();
+ } else {
+ throw new IllegalStateException();
+ }
+ }
+
public Set<Artifact> resolveProjectArtifacts(
MavenProject project,
Collection<String> scopesToCollect,
@@ -216,7 +234,7 @@ public class LifecycleDependencyResolver {
}
if (scopesToCollect.isEmpty() && scopesToResolve.isEmpty()) {
- return new LinkedHashSet<>();
+ return new SetWithResolutionResult(null, new LinkedHashSet<>());
}
scopesToCollect = new HashSet<>(scopesToCollect);
@@ -270,7 +288,7 @@ public class LifecycleDependencyResolver {
Collections.singletonList(project.getArtifact().getId()),
collectionFilter);
}
- return artifacts;
+ return new SetWithResolutionResult(result, artifacts);
}
private boolean areAllDependenciesInReactor(
diff --git
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
new file mode 100644
index 0000000000..872d632838
--- /dev/null
+++
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.lifecycle.internal;
+
+import java.util.AbstractSet;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.artifact.ProjectArtifactsCache;
+
+public class SetWithResolutionResult extends AbstractSet<Artifact>
+ implements ProjectArtifactsCache.ArtifactsSetWithResult {
+ final DependencyResolutionResult result;
+ final Set<Artifact> artifacts;
+
+ public SetWithResolutionResult(DependencyResolutionResult result,
Set<Artifact> artifacts) {
+ this.result = result;
+ this.artifacts = Collections.unmodifiableSet(artifacts);
+ }
+
+ @Override
+ public Iterator<Artifact> iterator() {
+ return artifacts.iterator();
+ }
+
+ @Override
+ public int size() {
+ return artifacts.size();
+ }
+
+ @Override
+ public DependencyResolutionResult getResult() {
+ return result;
+ }
+}
diff --git
a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
index 7cce250c3b..c7842452c1 100644
---
a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
+++
b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
@@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.internal.SetWithResolutionResult;
import org.apache.maven.project.MavenProject;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.LocalRepository;
@@ -140,13 +141,10 @@ public class DefaultProjectArtifactsCache implements
ProjectArtifactsCache {
if (o == this) {
return true;
}
-
if (!(o instanceof CacheKey)) {
return false;
}
-
CacheKey that = (CacheKey) o;
-
return Objects.equals(groupId, that.groupId)
&& Objects.equals(artifactId, that.artifactId)
&& Objects.equals(version, that.version)
@@ -181,46 +179,47 @@ public class DefaultProjectArtifactsCache implements
ProjectArtifactsCache {
@Override
public CacheRecord get(Key key) throws LifecycleExecutionException {
CacheRecord cacheRecord = cache.get(key);
-
if (cacheRecord != null && cacheRecord.getException() != null) {
throw cacheRecord.getException();
}
-
return cacheRecord;
}
@Override
public CacheRecord put(Key key, Set<Artifact> projectArtifacts) {
Objects.requireNonNull(projectArtifacts, "projectArtifacts cannot be
null");
-
assertUniqueKey(key);
- CacheRecord record = new CacheRecord(Collections.unmodifiableSet(new
LinkedHashSet<>(projectArtifacts)));
+ SetWithResolutionResult artifacts;
+ if (projectArtifacts instanceof SetWithResolutionResult) {
+ artifacts = (SetWithResolutionResult) projectArtifacts;
+ } else if (projectArtifacts instanceof ArtifactsSetWithResult) {
+ artifacts = new SetWithResolutionResult(
+ ((ArtifactsSetWithResult) projectArtifacts).getResult(),
projectArtifacts);
+ } else {
+ throw new IllegalArgumentException("projectArtifacts must
implement ArtifactsSetWithResult");
+ }
+ CacheRecord record = new CacheRecord(artifacts);
cache.put(key, record);
-
return record;
}
- protected void assertUniqueKey(Key key) {
- if (cache.containsKey(key)) {
- throw new IllegalStateException("Duplicate artifact resolution
result for project " + key);
- }
- }
-
@Override
public CacheRecord put(Key key, LifecycleExecutionException exception) {
Objects.requireNonNull(exception, "exception cannot be null");
-
assertUniqueKey(key);
-
CacheRecord record = new CacheRecord(exception);
-
cache.put(key, record);
-
return record;
}
+ protected void assertUniqueKey(Key key) {
+ if (cache.containsKey(key)) {
+ throw new IllegalStateException("Duplicate artifact resolution
result for project " + key);
+ }
+ }
+
@Override
public void flush() {
cache.clear();
diff --git
a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
index c51b38324b..6677b39cdc 100644
---
a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
+++
b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
@@ -23,6 +23,7 @@ import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.project.DependencyResolutionResult;
import org.apache.maven.project.MavenProject;
import org.eclipse.aether.RepositorySystemSession;
@@ -41,21 +42,17 @@ public interface ProjectArtifactsCache {
// marker interface for cache keys
}
+ interface ArtifactsSetWithResult extends Set<Artifact> {
+ DependencyResolutionResult getResult();
+ }
+
/**
* CacheRecord
*/
class CacheRecord {
- public Set<Artifact> getArtifacts() {
- return artifacts;
- }
-
private final Set<Artifact> artifacts;
- public LifecycleExecutionException getException() {
- return exception;
- }
-
private final LifecycleExecutionException exception;
CacheRecord(Set<Artifact> artifacts) {
@@ -67,6 +64,14 @@ public interface ProjectArtifactsCache {
this.artifacts = null;
this.exception = exception;
}
+
+ public Set<Artifact> getArtifacts() {
+ return artifacts;
+ }
+
+ public LifecycleExecutionException getException() {
+ return exception;
+ }
}
Key createKey(
diff --git
a/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
b/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
index 575d106d80..d42bcc078a 100644
---
a/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
+++
b/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
@@ -23,6 +23,7 @@ import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.lifecycle.internal.SetWithResolutionResult;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -47,7 +48,7 @@ class DefaultProjectArtifactsCacheTest {
artifacts.add(new DefaultArtifact("g", "a3", "v", "compile", "jar",
"", null));
artifacts.add(new DefaultArtifact("g", "a4", "v", "compile", "jar",
"", null));
- cache.put(project1, artifacts);
+ cache.put(project1, new SetWithResolutionResult(null, artifacts));
assertArrayEquals(
artifacts.toArray(new Artifact[0]),
@@ -61,7 +62,7 @@ class DefaultProjectArtifactsCacheTest {
artifacts.add(new DefaultArtifact("g", "a2", "v", "compile", "jar",
"", null));
artifacts.add(new DefaultArtifact("g", "a1", "v", "compile", "jar",
"", null));
- cache.put(project2, reversedArtifacts);
+ cache.put(project2, new SetWithResolutionResult(null,
reversedArtifacts));
assertArrayEquals(
reversedArtifacts.toArray(new Artifact[0]),