Skip to content

Commit 82a9d60

Browse files
[MDEP-940] Use Resolver API instead of m-a-t for resolving artifacts
1 parent 8e1f1b5 commit 82a9d60

File tree

9 files changed

+89
-111
lines changed

9 files changed

+89
-111
lines changed

src/main/java/org/apache/maven/plugins/dependency/fromDependencies/AbstractDependencyFilterMojo.java

+23-29
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.LinkedHashSet;
2525
import java.util.Set;
2626

27+
import org.apache.maven.RepositoryUtils;
2728
import org.apache.maven.artifact.Artifact;
2829
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
2930
import org.apache.maven.plugin.MojoExecutionException;
@@ -32,12 +33,12 @@
3233
import org.apache.maven.plugins.dependency.AbstractDependencyMojo;
3334
import org.apache.maven.plugins.dependency.utils.DependencyStatusSets;
3435
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
36+
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
3537
import org.apache.maven.plugins.dependency.utils.translators.ArtifactTranslator;
3638
import org.apache.maven.plugins.dependency.utils.translators.ClassifierTypeTranslator;
3739
import org.apache.maven.project.MavenProject;
3840
import org.apache.maven.project.ProjectBuilder;
3941
import org.apache.maven.project.ProjectBuildingException;
40-
import org.apache.maven.project.ProjectBuildingRequest;
4142
import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
4243
import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
4344
import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
@@ -47,11 +48,9 @@
4748
import org.apache.maven.shared.artifact.filter.collection.ProjectTransitivityFilter;
4849
import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
4950
import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
50-
import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
51-
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
52-
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
5351
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
5452
import org.apache.maven.shared.transfer.repository.RepositoryManager;
53+
import org.eclipse.aether.resolution.ArtifactResolutionException;
5554

5655
/**
5756
* Class that encapsulates the plugin parameters, and contains methods that handle dependency filtering
@@ -60,8 +59,9 @@
6059
* @see org.apache.maven.plugins.dependency.AbstractDependencyMojo
6160
*/
6261
public abstract class AbstractDependencyFilterMojo extends AbstractDependencyMojo {
62+
6363
@Component
64-
private ArtifactResolver artifactResolver;
64+
private ResolverUtil resolverUtil;
6565

6666
@Component
6767
private DependencyResolver dependencyResolver;
@@ -364,14 +364,11 @@ private void addParentArtifacts(MavenProject project, Set<Artifact> artifacts) t
364364
break;
365365
}
366366
try {
367-
ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest();
368-
369-
Artifact resolvedArtifact = artifactResolver
370-
.resolveArtifact(buildingRequest, project.getArtifact())
371-
.getArtifact();
367+
org.eclipse.aether.artifact.Artifact resolvedArtifact = resolverUtil.resolveArtifact(
368+
RepositoryUtils.toArtifact(project.getArtifact()), project.getRemoteProjectRepositories());
372369

373-
artifacts.add(resolvedArtifact);
374-
} catch (ArtifactResolverException e) {
370+
artifacts.add(RepositoryUtils.toArtifact(resolvedArtifact));
371+
} catch (ArtifactResolutionException e) {
375372
throw new MojoExecutionException(e.getMessage(), e);
376373
}
377374
}
@@ -385,7 +382,7 @@ private void addParentArtifacts(MavenProject project, Set<Artifact> artifacts) t
385382
* @return DependencyStatusSets - Bean of TreeSets that contains information on the projects dependencies
386383
* @throws MojoExecutionException in case of an error.
387384
*/
388-
protected DependencyStatusSets getClassifierTranslatedDependencies(Set<Artifact> artifacts, boolean stopOnFailure)
385+
private DependencyStatusSets getClassifierTranslatedDependencies(Set<Artifact> artifacts, boolean stopOnFailure)
389386
throws MojoExecutionException {
390387
Set<Artifact> unResolvedArtifacts = new LinkedHashSet<>();
391388
Set<Artifact> resolvedArtifacts = artifacts;
@@ -397,7 +394,7 @@ protected DependencyStatusSets getClassifierTranslatedDependencies(Set<Artifact>
397394
if (classifier != null && !classifier.isEmpty()) {
398395
ArtifactTranslator translator =
399396
new ClassifierTypeTranslator(artifactHandlerManager, this.classifier, this.type);
400-
Collection<ArtifactCoordinate> coordinates = translator.translate(artifacts, getLog());
397+
Collection<org.eclipse.aether.artifact.Artifact> coordinates = translator.translate(artifacts, getLog());
401398

402399
status = filterMarkedDependencies(artifacts);
403400

@@ -447,29 +444,26 @@ protected DependencyStatusSets filterMarkedDependencies(Set<Artifact> artifacts)
447444
}
448445

449446
/**
450-
* @param coordinates The set of artifact coordinates{@link ArtifactCoordinate}.
447+
* @param artifacts The set of artifacts
451448
* @param stopOnFailure <code>true</code> if we should fail with exception if an artifact couldn't be resolved
452449
* <code>false</code> otherwise.
453450
* @return the resolved artifacts. {@link Artifact}.
454451
* @throws MojoExecutionException in case of error.
455452
*/
456-
protected Set<Artifact> resolve(Set<ArtifactCoordinate> coordinates, boolean stopOnFailure)
453+
private Set<Artifact> resolve(Set<org.eclipse.aether.artifact.Artifact> artifacts, boolean stopOnFailure)
457454
throws MojoExecutionException {
458-
ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest();
459455

460456
Set<Artifact> resolvedArtifacts = new LinkedHashSet<>();
461-
for (ArtifactCoordinate coordinate : coordinates) {
457+
for (org.eclipse.aether.artifact.Artifact artifact : artifacts) {
462458
try {
463-
Artifact artifact = artifactResolver
464-
.resolveArtifact(buildingRequest, coordinate)
465-
.getArtifact();
466-
resolvedArtifacts.add(artifact);
467-
} catch (ArtifactResolverException ex) {
459+
org.eclipse.aether.artifact.Artifact resolveArtifact =
460+
resolverUtil.resolveArtifact(artifact, getProject().getRemoteProjectRepositories());
461+
resolvedArtifacts.add(RepositoryUtils.toArtifact(resolveArtifact));
462+
} catch (ArtifactResolutionException ex) {
468463
// an error occurred during resolution, log it an continue
469-
getLog().debug("error resolving: " + coordinate);
470-
getLog().debug(ex);
464+
getLog().debug("error resolving: " + artifact, ex);
471465
if (stopOnFailure) {
472-
throw new MojoExecutionException("error resolving: " + coordinate, ex);
466+
throw new MojoExecutionException("error resolving: " + artifact, ex);
473467
}
474468
}
475469
}
@@ -507,10 +501,10 @@ public void setPrependGroupId(boolean prependGroupId) {
507501
}
508502

509503
/**
510-
* @return {@link #artifactResolver}
504+
* @return {@link #resolverUtil}
511505
*/
512-
protected final ArtifactResolver getArtifactResolver() {
513-
return artifactResolver;
506+
protected final ResolverUtil getResolverUtil() {
507+
return resolverUtil;
514508
}
515509

516510
/**

src/main/java/org/apache/maven/plugins/dependency/fromDependencies/CopyDependenciesMojo.java

+9-13
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Map;
2525
import java.util.Set;
2626

27+
import org.apache.maven.RepositoryUtils;
2728
import org.apache.maven.artifact.Artifact;
2829
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
2930
import org.apache.maven.plugin.MojoExecutionException;
@@ -38,10 +39,10 @@
3839
import org.apache.maven.plugins.dependency.utils.filters.DestFileFilter;
3940
import org.apache.maven.project.ProjectBuildingRequest;
4041
import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
41-
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
4242
import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
4343
import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
44-
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
44+
import org.eclipse.aether.resolution.ArtifactResolutionException;
45+
import org.eclipse.aether.util.artifact.SubArtifact;
4546

4647
/**
4748
* Goal that copies the project dependencies from the repository to a defined location.
@@ -289,21 +290,16 @@ public void copyPoms(File destDir, Set<Artifact> artifacts, boolean removeVersio
289290
* @return {@link Artifact}
290291
*/
291292
protected Artifact getResolvedPomArtifact(Artifact artifact) {
292-
DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
293-
coordinate.setGroupId(artifact.getGroupId());
294-
coordinate.setArtifactId(artifact.getArtifactId());
295-
coordinate.setVersion(artifact.getVersion());
296-
coordinate.setExtension("pom");
297293

298294
Artifact pomArtifact = null;
299295
// Resolve the pom artifact using repos
300296
try {
301-
ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest();
302-
303-
pomArtifact = getArtifactResolver()
304-
.resolveArtifact(buildingRequest, coordinate)
305-
.getArtifact();
306-
} catch (ArtifactResolverException e) {
297+
org.eclipse.aether.artifact.Artifact aArtifact = RepositoryUtils.toArtifact(artifact);
298+
org.eclipse.aether.artifact.Artifact aPomArtifact = new SubArtifact(aArtifact, null, "pom");
299+
org.eclipse.aether.artifact.Artifact resolvedPom =
300+
getResolverUtil().resolveArtifact(aPomArtifact, getProject().getRemoteProjectRepositories());
301+
pomArtifact = RepositoryUtils.toArtifact(resolvedPom);
302+
} catch (ArtifactResolutionException e) {
307303
getLog().info(e.getMessage());
308304
}
309305
return pomArtifact;

src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java

+18-23
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
package org.apache.maven.plugins.dependency.resolvers;
2020

2121
import java.io.IOException;
22+
import java.util.HashSet;
2223
import java.util.LinkedHashSet;
2324
import java.util.Objects;
2425
import java.util.Set;
2526

27+
import org.apache.maven.RepositoryUtils;
2628
import org.apache.maven.artifact.Artifact;
2729
import org.apache.maven.plugin.MojoExecutionException;
2830
import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -43,6 +45,7 @@
4345
import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
4446
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
4547
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
48+
import org.eclipse.aether.resolution.ArtifactResolutionException;
4649

4750
/**
4851
* Goal that resolves all project plugins and reports and their dependencies.
@@ -139,7 +142,11 @@ protected void doExecute() throws MojoExecutionException {
139142
DependencyUtil.write(output, outputFile, appendOutput, encoding);
140143
}
141144
}
142-
} catch (IOException | ArtifactFilterException | ArtifactResolverException | DependencyResolverException e) {
145+
} catch (IOException
146+
| ArtifactFilterException
147+
| ArtifactResolverException
148+
| DependencyResolverException
149+
| ArtifactResolutionException e) {
143150
throw new MojoExecutionException(e.getMessage(), e);
144151
}
145152
}
@@ -208,39 +215,27 @@ private FilterArtifacts getArtifactsFilter() {
208215
* @throws ArtifactFilterException in case of an error
209216
* @throws ArtifactResolverException in case of an error
210217
*/
211-
private Set<Artifact> resolvePluginArtifacts() throws ArtifactFilterException, ArtifactResolverException {
218+
private Set<Artifact> resolvePluginArtifacts()
219+
throws ArtifactFilterException, ArtifactResolverException, ArtifactResolutionException {
212220
final Set<Artifact> plugins = getProject().getPluginArtifacts();
213221
final Set<Artifact> reports = getProject().getReportArtifacts();
214222

215-
Set<Artifact> artifacts = new LinkedHashSet<>();
223+
Set<Artifact> artifacts = new HashSet<>();
216224
artifacts.addAll(reports);
217225
artifacts.addAll(plugins);
218226

219227
final FilterArtifacts filter = getArtifactsFilter();
220228
artifacts = filter.filter(artifacts);
221229

222-
// final ArtifactFilter filter = getPluginFilter();
230+
Set<Artifact> result = new HashSet<>();
223231
for (final Artifact artifact : new LinkedHashSet<>(artifacts)) {
224-
// if ( !filter.include( artifact ) )
225-
// {
226-
// final String logStr =
227-
// String.format( " Plugin SKIPPED: %s", DependencyUtil.getFormattedFileName( artifact, false ) );
228-
//
229-
// if ( !silent )
230-
// {
231-
// this.getLog().info( logStr );
232-
// }
233-
//
234-
// artifacts.remove( artifact );
235-
// continue;
236-
// }
237-
238-
ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();
239-
240-
// resolve the new artifact
241-
getArtifactResolver().resolveArtifact(buildingRequest, artifact).getArtifact();
232+
233+
org.eclipse.aether.artifact.Artifact resolveArtifact = getResolverUtil()
234+
.resolveArtifact(
235+
RepositoryUtils.toArtifact(artifact), getProject().getRemotePluginRepositories());
236+
result.add(RepositoryUtils.toArtifact(resolveArtifact));
242237
}
243-
return artifacts;
238+
return result;
244239
}
245240

246241
@Override

src/main/java/org/apache/maven/plugins/dependency/utils/translators/ArtifactTranslator.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.apache.maven.artifact.Artifact;
2424
import org.apache.maven.plugin.logging.Log;
25-
import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
2625

2726
/**
2827
* @author <a href="mailto:[email protected]">Brian Fox</a>
@@ -31,7 +30,7 @@ public interface ArtifactTranslator {
3130
/**
3231
* @param artifacts set of {@link Artifact}s.
3332
* @param log {@link Log}
34-
* @return {@link ArtifactCoordinate}
33+
* @return set of {@link org.eclipse.aether.artifact.Artifact}
3534
*/
36-
Set<ArtifactCoordinate> translate(Set<Artifact> artifacts, Log log);
35+
Set<org.eclipse.aether.artifact.Artifact> translate(Set<Artifact> artifacts, Log log);
3736
}

src/main/java/org/apache/maven/plugins/dependency/utils/translators/ClassifierTypeTranslator.java

+8-31
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
import java.util.LinkedHashSet;
2222
import java.util.Set;
2323

24+
import org.apache.maven.RepositoryUtils;
2425
import org.apache.maven.artifact.Artifact;
2526
import org.apache.maven.artifact.handler.ArtifactHandler;
2627
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
2728
import org.apache.maven.plugin.logging.Log;
28-
import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
29-
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
29+
import org.eclipse.aether.util.artifact.SubArtifact;
3030

3131
/**
3232
* @author <a href="mailto:[email protected]">Brian Fox</a>
@@ -39,13 +39,13 @@ public class ClassifierTypeTranslator implements ArtifactTranslator {
3939
private String type;
4040

4141
/**
42-
* @param artifactHanderManager {@link ArtifactHandlerManager}.
42+
* @param artifactHandlerManager {@link ArtifactHandlerManager}.
4343
* @param theClassifier The classifier to use.
4444
* @param theType The type.
4545
*/
4646
public ClassifierTypeTranslator(
47-
ArtifactHandlerManager artifactHanderManager, String theClassifier, String theType) {
48-
this.artifactHandlerManager = artifactHanderManager;
47+
ArtifactHandlerManager artifactHandlerManager, String theClassifier, String theType) {
48+
this.artifactHandlerManager = artifactHandlerManager;
4949
this.classifier = theClassifier;
5050
this.type = theType;
5151
}
@@ -56,8 +56,8 @@ public ClassifierTypeTranslator(
5656
* org.apache.maven.plugin.logging.Log)
5757
*/
5858
@Override
59-
public Set<ArtifactCoordinate> translate(Set<Artifact> artifacts, Log log) {
60-
Set<ArtifactCoordinate> results;
59+
public Set<org.eclipse.aether.artifact.Artifact> translate(Set<Artifact> artifacts, Log log) {
60+
Set<org.eclipse.aether.artifact.Artifact> results;
6161

6262
log.debug("Translating Artifacts using Classifier: " + this.classifier + " and Type: " + this.type);
6363
results = new LinkedHashSet<>();
@@ -88,30 +88,7 @@ public Set<ArtifactCoordinate> translate(Set<Artifact> artifacts, Log log) {
8888
useClassifier = artifact.getClassifier();
8989
}
9090

91-
DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
92-
coordinate.setGroupId(artifact.getGroupId());
93-
coordinate.setArtifactId(artifact.getArtifactId());
94-
coordinate.setVersion(artifact.getVersion());
95-
coordinate.setClassifier(useClassifier);
96-
coordinate.setExtension(extension);
97-
98-
// // Create a new artifact
99-
// Artifact newArtifact = factory.createArtifactWithClassifier( artifact.getGroupId(), artifact
100-
// .getArtifactId(), artifact.getVersion(), useType, useClassifier );
101-
//
102-
// // note the new artifacts will always have the scope set to null. We
103-
// // should
104-
// // reset it here so that it will pass other filters if needed
105-
// newArtifact.setScope( artifact.getScope() );
106-
//
107-
// if ( Artifact.SCOPE_SYSTEM.equals( newArtifact.getScope() ) )
108-
// {
109-
// File baseDir = repositoryManager.getLocalRepositoryBasedir( buildingRequest );
110-
// String path = repositoryManager.getPathForLocalArtifact( buildingRequest, newArtifact );
111-
// newArtifact.setFile( new File( baseDir, path ) );
112-
// }
113-
114-
results.add(coordinate);
91+
results.add(new SubArtifact(RepositoryUtils.toArtifact(artifact), useClassifier, extension));
11592
}
11693

11794
return results;

src/test/java/org/apache/maven/plugins/dependency/fromDependencies/TestCopyDependenciesMojo.java

+6
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@
3434
import org.apache.maven.plugins.dependency.AbstractDependencyMojoTestCase;
3535
import org.apache.maven.plugins.dependency.testUtils.stubs.DependencyProjectStub;
3636
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
37+
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
3738
import org.apache.maven.plugins.dependency.utils.markers.DefaultFileMarkerHandler;
3839
import org.apache.maven.project.MavenProject;
40+
import org.eclipse.aether.RepositorySystem;
3941

4042
public class TestCopyDependenciesMojo extends AbstractDependencyMojoTestCase {
4143

@@ -52,6 +54,10 @@ protected void setUp() throws Exception {
5254
MavenSession session = newMavenSession(project);
5355
getContainer().addComponent(session, MavenSession.class.getName());
5456

57+
RepositorySystem repositorySystem = lookup(RepositorySystem.class);
58+
ResolverUtil resolverUtil = new ResolverUtil(repositorySystem, () -> session);
59+
getContainer().addComponent(resolverUtil, ResolverUtil.class.getName());
60+
5561
File testPom = new File(getBasedir(), "target/test-classes/unit/copy-dependencies-test/plugin-config.xml");
5662
mojo = (CopyDependenciesMojo) lookupMojo("copy-dependencies", testPom);
5763
mojo.outputDirectory = new File(this.testDir, "outputDirectory");

0 commit comments

Comments
 (0)