Skip to content

Commit bb40a30

Browse files
[MINVOKER-333] Artifact should be installed once
1 parent 3e4f3c9 commit bb40a30

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java

+22-20
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import java.io.File;
2222
import java.io.IOException;
2323
import java.io.UncheckedIOException;
24-
import java.util.ArrayList;
25-
import java.util.Collection;
2624
import java.util.Collections;
2725
import java.util.LinkedHashMap;
2826
import java.util.List;
@@ -68,6 +66,7 @@
6866
import org.eclipse.aether.resolution.DependencyRequest;
6967
import org.eclipse.aether.resolution.DependencyResolutionException;
7068
import org.eclipse.aether.resolution.DependencyResult;
69+
import org.eclipse.aether.util.artifact.ArtifactIdUtils;
7170
import org.eclipse.aether.util.artifact.JavaScopes;
7271
import org.eclipse.aether.util.artifact.SubArtifact;
7372
import org.eclipse.aether.util.filter.DependencyFilterUtils;
@@ -163,7 +162,7 @@ public void execute() throws MojoExecutionException {
163162
return;
164163
}
165164

166-
Collection<Artifact> resolvedArtifacts = new ArrayList<>();
165+
Map<String, Artifact> resolvedArtifacts = new LinkedHashMap<>();
167166

168167
try {
169168

@@ -181,19 +180,20 @@ public void execute() throws MojoExecutionException {
181180
}
182181
}
183182

184-
private void resolveProjectArtifacts(Collection<Artifact> resolvedArtifacts) {
183+
private void resolveProjectArtifacts(Map<String, Artifact> resolvedArtifacts) {
185184

186185
// pom packaging doesn't have a main artifact
187186
if (project.getArtifact() != null && project.getArtifact().getFile() != null) {
188-
resolvedArtifacts.add(RepositoryUtils.toArtifact(project.getArtifact()));
187+
Artifact artifact = RepositoryUtils.toArtifact(project.getArtifact());
188+
resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
189189
}
190190

191-
resolvedArtifacts.addAll(project.getAttachedArtifacts().stream()
191+
project.getAttachedArtifacts().stream()
192192
.map(RepositoryUtils::toArtifact)
193-
.collect(Collectors.toList()));
193+
.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
194194
}
195195

196-
private void resolveProjectPoms(MavenProject project, Collection<Artifact> resolvedArtifacts)
196+
private void resolveProjectPoms(MavenProject project, Map<String, Artifact> resolvedArtifacts)
197197
throws ArtifactResolutionException {
198198

199199
if (project == null) {
@@ -202,15 +202,15 @@ private void resolveProjectPoms(MavenProject project, Collection<Artifact> resol
202202

203203
Artifact projectPom = RepositoryUtils.toArtifact(new ProjectArtifact(project));
204204
if (projectPom.getFile() != null) {
205-
resolvedArtifacts.add(projectPom);
205+
resolvedArtifacts.put(projectPom.toString(), projectPom);
206206
} else {
207207
Artifact artifact = resolveArtifact(projectPom, project.getRemoteProjectRepositories());
208-
resolvedArtifacts.add(artifact);
208+
resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
209209
}
210210
resolveProjectPoms(project.getParent(), resolvedArtifacts);
211211
}
212212

213-
private void resolveProjectDependencies(Collection<Artifact> resolvedArtifacts)
213+
private void resolveProjectDependencies(Map<String, Artifact> resolvedArtifacts)
214214
throws ArtifactResolutionException, MojoExecutionException, DependencyResolutionException {
215215

216216
DependencyFilter classpathFilter = DependencyFilterUtils.classpathFilter(scope);
@@ -245,7 +245,7 @@ private void resolveProjectDependencies(Collection<Artifact> resolvedArtifacts)
245245
.map(ArtifactResult::getArtifact)
246246
.collect(Collectors.toList());
247247

248-
resolvedArtifacts.addAll(artifacts);
248+
artifacts.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
249249
resolvePomsForArtifacts(artifacts, resolvedArtifacts, collectRequest.getRepositories());
250250
}
251251

@@ -254,7 +254,7 @@ private void resolveProjectDependencies(Collection<Artifact> resolvedArtifacts)
254254
*
255255
* @return
256256
*/
257-
private void resolveExtraArtifacts(Collection<Artifact> resolvedArtifacts)
257+
private void resolveExtraArtifacts(Map<String, Artifact> resolvedArtifacts)
258258
throws MojoExecutionException, DependencyResolutionException, ArtifactDescriptorException,
259259
ArtifactResolutionException {
260260

@@ -309,13 +309,15 @@ private void resolveExtraArtifacts(Collection<Artifact> resolvedArtifacts)
309309
.map(ArtifactResult::getArtifact)
310310
.collect(Collectors.toList());
311311

312-
resolvedArtifacts.addAll(artifacts);
312+
artifacts.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
313313
resolvePomsForArtifacts(artifacts, resolvedArtifacts, collectRequest.getRepositories());
314314
}
315315
}
316316

317317
private void resolvePomsForArtifacts(
318-
List<Artifact> artifacts, Collection<Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
318+
List<Artifact> artifacts,
319+
Map<String, Artifact> resolvedArtifacts,
320+
List<RemoteRepository> remoteRepositories)
319321
throws ArtifactResolutionException, MojoExecutionException {
320322

321323
for (Artifact a : artifacts) {
@@ -325,10 +327,10 @@ private void resolvePomsForArtifacts(
325327
}
326328

327329
private void resolvePomWithParents(
328-
Artifact artifact, Collection<Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
330+
Artifact artifact, Map<String, Artifact> resolvedArtifacts, List<RemoteRepository> remoteRepositories)
329331
throws MojoExecutionException, ArtifactResolutionException {
330332

331-
if (resolvedArtifacts.contains(artifact)) {
333+
if (resolvedArtifacts.containsKey(ArtifactIdUtils.toId(artifact))) {
332334
return;
333335
}
334336

@@ -341,7 +343,7 @@ private void resolvePomWithParents(
341343
resolvePomWithParents(resolvedPom, resolvedArtifacts, remoteRepositories);
342344
}
343345

344-
resolvedArtifacts.add(artifact);
346+
resolvedArtifacts.put(ArtifactIdUtils.toId(artifact), artifact);
345347
}
346348

347349
private Artifact resolveArtifact(Artifact artifact, List<RemoteRepository> remoteRepositories)
@@ -357,15 +359,15 @@ private Artifact resolveArtifact(Artifact artifact, List<RemoteRepository> remot
357359
/**
358360
* Install list of artifacts into local repository.
359361
*/
360-
private void installArtifacts(Collection<Artifact> resolvedArtifacts) throws InstallationException {
362+
private void installArtifacts(Map<String, Artifact> resolvedArtifacts) throws InstallationException {
361363

362364
RepositorySystemSession systemSessionForLocalRepo = createSystemSessionForLocalRepo();
363365

364366
// we can have on dependency two artifacts with the same groupId:artifactId
365367
// with different version, in such case when we install both in one request
366368
// metadata will contain only one version
367369

368-
Map<String, List<Artifact>> collect = resolvedArtifacts.stream()
370+
Map<String, List<Artifact>> collect = resolvedArtifacts.values().stream()
369371
.filter(a -> !hasTheSamePathAsTarget(a, systemSessionForLocalRepo))
370372
.collect(Collectors.groupingBy(
371373
a -> String.format("%s:%s:%s", a.getGroupId(), a.getArtifactId(), a.getVersion()),

0 commit comments

Comments
 (0)