[MINVOKER-333] Artifact should be installed once
diff --git a/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java b/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
index e9fc917..0a7ec02 100644
--- a/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
+++ b/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
@@ -21,8 +21,6 @@
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
@@ -68,6 +66,7 @@
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.DependencyResult;
+import org.eclipse.aether.util.artifact.ArtifactIdUtils;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.artifact.SubArtifact;
import org.eclipse.aether.util.filter.DependencyFilterUtils;
@@ -163,7 +162,7 @@
return;
}
- Collection<Artifact> resolvedArtifacts = new ArrayList<>();
+ Map<String, Artifact> resolvedArtifacts = new LinkedHashMap<>();
try {
@@ -181,19 +180,20 @@
}
}
- private void resolveProjectArtifacts(Collection<Artifact> resolvedArtifacts) {
+ private void resolveProjectArtifacts(Map<String, Artifact> resolvedArtifacts) {
// pom packaging doesn't have a main artifact
if (project.getArtifact() != null && project.getArtifact().getFile() != null) {
- resolvedArtifacts.add(RepositoryUtils.toArtifact(project.getArtifact()));
+ Artifact artifact = RepositoryUtils.toArtifact(project.getArtifact());
+ resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
}
- resolvedArtifacts.addAll(project.getAttachedArtifacts().stream()
+ project.getAttachedArtifacts().stream()
.map(RepositoryUtils::toArtifact)
- .collect(Collectors.toList()));
+ .forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
}
- private void resolveProjectPoms(MavenProject project, Collection<Artifact> resolvedArtifacts)
+ private void resolveProjectPoms(MavenProject project, Map<String, Artifact> resolvedArtifacts)
throws ArtifactResolutionException {
if (project == null) {
@@ -202,15 +202,15 @@
Artifact projectPom = RepositoryUtils.toArtifact(new ProjectArtifact(project));
if (projectPom.getFile() != null) {
- resolvedArtifacts.add(projectPom);
+ resolvedArtifacts.put(projectPom.toString(), projectPom);
} else {
Artifact artifact = resolveArtifact(projectPom, project.getRemoteProjectRepositories());
- resolvedArtifacts.add(artifact);
+ resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
}
resolveProjectPoms(project.getParent(), resolvedArtifacts);
}
- private void resolveProjectDependencies(Collection<Artifact> resolvedArtifacts)
+ private void resolveProjectDependencies(Map<String, Artifact> resolvedArtifacts)
throws ArtifactResolutionException, MojoExecutionException, DependencyResolutionException {
DependencyFilter classpathFilter = DependencyFilterUtils.classpathFilter(scope);
@@ -245,7 +245,7 @@
.map(ArtifactResult::getArtifact)
.collect(Collectors.toList());
- resolvedArtifacts.addAll(artifacts);
+ artifacts.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
resolvePomsForArtifacts(artifacts, resolvedArtifacts, collectRequest.getRepositories());
}
@@ -254,7 +254,7 @@
*
* @return
*/
- private void resolveExtraArtifacts(Collection<Artifact> resolvedArtifacts)
+ private void resolveExtraArtifacts(Map<String, Artifact> resolvedArtifacts)
throws MojoExecutionException, DependencyResolutionException, ArtifactDescriptorException,
ArtifactResolutionException {
@@ -309,13 +309,15 @@
.map(ArtifactResult::getArtifact)
.collect(Collectors.toList());
- resolvedArtifacts.addAll(artifacts);
+ artifacts.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
resolvePomsForArtifacts(artifacts, resolvedArtifacts, collectRequest.getRepositories());
}
}
private void resolvePomsForArtifacts(
- List<Artifact> artifacts, Collection<Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
+ List<Artifact> artifacts,
+ Map<String, Artifact> resolvedArtifacts,
+ List<RemoteRepository> remoteRepositories)
throws ArtifactResolutionException, MojoExecutionException {
for (Artifact a : artifacts) {
@@ -325,10 +327,10 @@
}
private void resolvePomWithParents(
- Artifact artifact, Collection<Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
+ Artifact artifact, Map<String, Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
throws MojoExecutionException, ArtifactResolutionException {
- if (resolvedArtifacts.contains(artifact)) {
+ if (resolvedArtifacts.containsKey(ArtifactIdUtils.toId(artifact))) {
return;
}
@@ -341,7 +343,7 @@
resolvePomWithParents(resolvedPom, resolvedArtifacts, remoteRepositories);
}
- resolvedArtifacts.add(artifact);
+ resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
}
private Artifact resolveArtifact(Artifact artifact, List<RemoteRepository> remoteRepositories)
@@ -357,7 +359,7 @@
/**
* Install list of artifacts into local repository.
*/
- private void installArtifacts(Collection<Artifact> resolvedArtifacts) throws InstallationException {
+ private void installArtifacts(Map<String, Artifact> resolvedArtifacts) throws InstallationException {
RepositorySystemSession systemSessionForLocalRepo = createSystemSessionForLocalRepo();
@@ -365,7 +367,7 @@
// with different version, in such case when we install both in one request
// metadata will contain only one version
- Map<String, List<Artifact>> collect = resolvedArtifacts.stream()
+ Map<String, List<Artifact>> collect = resolvedArtifacts.values().stream()
.filter(a -> !hasTheSamePathAsTarget(a, systemSessionForLocalRepo))
.collect(Collectors.groupingBy(
a -> String.format("%s:%s:%s", a.getGroupId(), a.getArtifactId(), a.getVersion()),