Skip to content

Commit a862d8c

Browse files
fix issue-511
1 parent d112c33 commit a862d8c

File tree

4 files changed

+148
-56
lines changed

4 files changed

+148
-56
lines changed

pom.xml

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,26 @@
100100
<artifactId>maven-resolver-api</artifactId>
101101
<version>${maven-resolver.version}</version>
102102
</dependency>
103+
<dependency>
104+
<groupId>org.apache.maven.resolver</groupId>
105+
<artifactId>maven-resolver-connector-basic</artifactId>
106+
<version>${maven-resolver.version}</version>
107+
</dependency>
108+
<dependency>
109+
<groupId>org.apache.maven.resolver</groupId>
110+
<artifactId>maven-resolver-impl</artifactId>
111+
<version>${maven-resolver.version}</version>
112+
</dependency>
113+
<dependency>
114+
<groupId>org.apache.maven.resolver</groupId>
115+
<artifactId>maven-resolver-transport-file</artifactId>
116+
<version>${maven-resolver.version}</version>
117+
</dependency>
118+
<dependency>
119+
<groupId>org.apache.maven.resolver</groupId>
120+
<artifactId>maven-resolver-transport-wagon</artifactId>
121+
<version>${maven-resolver.version}</version>
122+
</dependency>
103123
<dependency>
104124
<groupId>org.apache.maven.resolver</groupId>
105125
<artifactId>maven-resolver-util</artifactId>
@@ -161,9 +181,32 @@
161181
<version>3.6.4</version>
162182
</dependency>
163183
<dependency>
164-
<groupId>org.apache.maven.shared</groupId>
165-
<artifactId>maven-dependency-tree</artifactId>
166-
<version>3.3.0</version>
184+
<groupId>org.apache.maven.resolver</groupId>
185+
<artifactId>maven-resolver-api</artifactId>
186+
</dependency>
187+
<dependency>
188+
<groupId>org.apache.maven.resolver</groupId>
189+
<artifactId>maven-resolver-connector-basic</artifactId>
190+
<version>${maven-resolver.version}</version>
191+
</dependency>
192+
<dependency>
193+
<groupId>org.apache.maven.resolver</groupId>
194+
<artifactId>maven-resolver-impl</artifactId>
195+
<version>${maven-resolver.version}</version>
196+
</dependency>
197+
<dependency>
198+
<groupId>org.apache.maven.resolver</groupId>
199+
<artifactId>maven-resolver-transport-file</artifactId>
200+
<version>${maven-resolver.version}</version>
201+
</dependency>
202+
<dependency>
203+
<groupId>org.apache.maven.resolver</groupId>
204+
<artifactId>maven-resolver-transport-wagon</artifactId>
205+
<version>${maven-resolver.version}</version>
206+
</dependency>
207+
<dependency>
208+
<groupId>org.apache.maven.resolver</groupId>
209+
<artifactId>maven-resolver-util</artifactId>
167210
</dependency>
168211
<dependency>
169212
<groupId>org.apache.maven.shared</groupId>

src/main/java/org/jenkinsci/maven/plugins/hpi/AbstractDependencyGraphTraversingMojo.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/main/java/org/jenkinsci/maven/plugins/hpi/AssembleDependenciesMojo.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import java.util.HashMap;
77
import java.util.List;
88
import java.util.Map;
9+
import org.apache.maven.RepositoryUtils;
910
import org.apache.maven.plugin.MojoExecutionException;
1011
import org.apache.maven.plugin.MojoFailureException;
1112
import org.apache.maven.plugins.annotations.Mojo;
1213
import org.apache.maven.plugins.annotations.Parameter;
13-
import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
14-
import org.apache.maven.shared.dependency.graph.DependencyNode;
1514
import org.codehaus.plexus.util.FileUtils;
15+
import org.eclipse.aether.graph.DependencyNode;
1616

1717
/**
1818
* Used to assemble transitive dependencies of plugins into one location.
@@ -24,7 +24,7 @@
2424
* @author Kohsuke Kawaguchi
2525
*/
2626
@Mojo(name = "assemble-dependencies", requiresProject = true, threadSafe = true)
27-
public class AssembleDependenciesMojo extends AbstractDependencyGraphTraversingMojo {
27+
public class AssembleDependenciesMojo extends ResolverDependencyGraphTraversingMojo {
2828
/**
2929
* Where to copy plugins into.
3030
*/
@@ -47,7 +47,8 @@ public class AssembleDependenciesMojo extends AbstractDependencyGraphTraversingM
4747
* Scopes to include.
4848
*/
4949
// skip test scope as that's not meant to be bundled
50-
// "provided" indicates the plugin assumes that scope is available, so skip that as well
50+
// "provided" indicates the plugin assumes that scope is available, so skip that
51+
// as well
5152
// "system" is not used for plugins
5253
@Parameter
5354
private String scopes = "compile,runtime";
@@ -57,8 +58,8 @@ public class AssembleDependenciesMojo extends AbstractDependencyGraphTraversingM
5758
private final Map<String, MavenArtifact> hpis = new HashMap<>();
5859

5960
@Override
60-
protected boolean accept(DependencyNode g) {
61-
MavenArtifact a = wrap(g.getArtifact());
61+
protected boolean accept(DependencyNode node, DependencyNode parent) {
62+
MavenArtifact a = wrap(RepositoryUtils.toArtifact(node.getArtifact()));
6263

6364
if (!parsedScopes.contains(a.getScope())) {
6465
return false;
@@ -70,7 +71,7 @@ protected boolean accept(DependencyNode g) {
7071

7172
if (!a.isPlugin(getLog())) {
7273
// only traverse chains of direct plugin dependencies, unless it's from the root
73-
return g.getParent() == null;
74+
return parent == null;
7475
}
7576

7677
MavenArtifact v = hpis.get(a.getArtifactId());
@@ -93,7 +94,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
9394
}
9495

9596
traverseProject();
96-
} catch (DependencyGraphBuilderException e) {
97+
} catch (Exception e) {
9798
throw new MojoExecutionException("Failed to list up dependencies", e);
9899
}
99100

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package org.jenkinsci.maven.plugins.hpi;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
import org.apache.maven.RepositoryUtils;
6+
import org.apache.maven.plugin.MojoExecutionException;
7+
import org.apache.maven.plugins.annotations.Component;
8+
import org.eclipse.aether.RepositorySystem;
9+
import org.eclipse.aether.RepositorySystemSession;
10+
import org.eclipse.aether.collection.CollectRequest;
11+
import org.eclipse.aether.graph.Dependency;
12+
import org.eclipse.aether.graph.DependencyNode;
13+
import org.eclipse.aether.resolution.DependencyRequest;
14+
import org.eclipse.aether.resolution.DependencyResolutionException;
15+
16+
/**
17+
* Base class for Mojos that need to traverse the dependency graph using the
18+
* Maven Resolver API.
19+
* This replaces the old AbstractDependencyGraphTraversingMojo that used
20+
* maven-dependency-tree.
21+
*/
22+
public abstract class ResolverDependencyGraphTraversingMojo extends AbstractJenkinsMojo {
23+
24+
@Component
25+
protected RepositorySystem resolverRepositorySystem;
26+
27+
/**
28+
* Traverses the whole dependency tree rooted at the project.
29+
*/
30+
protected void traverseProject() throws MojoExecutionException {
31+
try {
32+
RepositorySystemSession repositorySystemSession = session.getRepositorySession();
33+
34+
// Convert Maven project to Resolver dependencies
35+
List<Dependency> dependencies = project.getDependencies().stream()
36+
.map(dep -> RepositoryUtils.toDependency(
37+
dep, session.getRepositorySession().getArtifactTypeRegistry()))
38+
.collect(Collectors.toList());
39+
40+
// Create collect request
41+
CollectRequest collectRequest = new CollectRequest();
42+
collectRequest.setRoot(new Dependency(RepositoryUtils.toArtifact(project.getArtifact()), null));
43+
collectRequest.setDependencies(dependencies);
44+
if (project.getDependencyManagement() != null) {
45+
collectRequest.setManagedDependencies(project.getDependencyManagement().getDependencies().stream()
46+
.map(dep -> RepositoryUtils.toDependency(
47+
dep, session.getRepositorySession().getArtifactTypeRegistry()))
48+
.collect(Collectors.toList()));
49+
}
50+
collectRequest.setRepositories(RepositoryUtils.toRepos(project.getRemoteArtifactRepositories()));
51+
52+
// Create dependency request
53+
DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, null);
54+
55+
// Resolve dependencies
56+
org.eclipse.aether.resolution.DependencyResult result =
57+
resolverRepositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
58+
59+
// Traverse the resolved dependency tree
60+
visit(result.getRoot());
61+
62+
} catch (DependencyResolutionException e) {
63+
throw new MojoExecutionException("Failed to resolve dependencies", e);
64+
}
65+
}
66+
67+
/**
68+
* Traverses a tree rooted at the given node.
69+
*/
70+
protected void visit(DependencyNode node) {
71+
visit(node, null);
72+
}
73+
74+
/**
75+
* Traverses a tree rooted at the given node with parent context.
76+
*/
77+
protected void visit(DependencyNode node, DependencyNode parent) {
78+
if (accept(node, parent)) {
79+
for (DependencyNode child : node.getChildren()) {
80+
visit(child, node);
81+
}
82+
}
83+
}
84+
85+
/**
86+
* Visits a node. Called at most once for any node in the dependency tree.
87+
*
88+
* @param node the current node
89+
* @param parent the parent node (null for root)
90+
* @return true if the children should be traversed.
91+
*/
92+
protected abstract boolean accept(DependencyNode node, DependencyNode parent);
93+
}

0 commit comments

Comments
 (0)