Skip to content

Commit e50031a

Browse files
Use Resolver API in go-offline for plugins resolving
- use the same method for generating plugin list as in resolve-plugin - move parameter where is used - move some method where is used - cleanups
1 parent 6ed4b1a commit e50031a

File tree

6 files changed

+195
-253
lines changed

6 files changed

+195
-253
lines changed

src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,21 @@
2020

2121
import java.util.List;
2222

23-
import org.apache.maven.artifact.repository.ArtifactRepository;
2423
import org.apache.maven.execution.MavenSession;
2524
import org.apache.maven.plugin.AbstractMojo;
2625
import org.apache.maven.plugin.MojoExecutionException;
2726
import org.apache.maven.plugin.MojoFailureException;
2827
import org.apache.maven.plugin.logging.SystemStreamLog;
2928
import org.apache.maven.plugins.annotations.Parameter;
3029
import org.apache.maven.plugins.dependency.utils.DependencySilentLog;
31-
import org.apache.maven.project.DefaultProjectBuildingRequest;
3230
import org.apache.maven.project.MavenProject;
33-
import org.apache.maven.project.ProjectBuildingRequest;
3431
import org.sonatype.plexus.build.incremental.BuildContext;
3532

3633
/**
3734
* @author <a href="mailto:[email protected]">Brian Fox</a>
3835
*/
3936
public abstract class AbstractDependencyMojo extends AbstractMojo {
4037

41-
/**
42-
* Remote repositories which will be searched for artifacts.
43-
*/
44-
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
45-
private List<ArtifactRepository> remoteRepositories;
46-
47-
/**
48-
* Remote repositories which will be searched for plugins.
49-
*/
50-
@Parameter(defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true)
51-
private List<ArtifactRepository> remotePluginRepositories;
52-
5338
/**
5439
* Contains the full list of projects in the reactor.
5540
*/
@@ -125,30 +110,6 @@ public final void execute() throws MojoExecutionException, MojoFailureException
125110
*/
126111
protected abstract void doExecute() throws MojoExecutionException, MojoFailureException;
127112

128-
/**
129-
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
130-
* repositories, used to resolve artifacts
131-
*/
132-
public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() {
133-
return newProjectBuildingRequest(remoteRepositories);
134-
}
135-
136-
/**
137-
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
138-
* repositories, used to resolve plugins
139-
*/
140-
protected ProjectBuildingRequest newResolvePluginProjectBuildingRequest() {
141-
return newProjectBuildingRequest(remotePluginRepositories);
142-
}
143-
144-
private ProjectBuildingRequest newProjectBuildingRequest(List<ArtifactRepository> repositories) {
145-
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
146-
147-
buildingRequest.setRemoteRepositories(repositories);
148-
149-
return buildingRequest;
150-
}
151-
152113
/**
153114
* @return returns the project
154115
*/

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

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,9 @@
2424
import org.apache.maven.execution.MavenSession;
2525
import org.apache.maven.plugins.annotations.Parameter;
2626
import org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo;
27-
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
2827
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
2928
import org.apache.maven.project.MavenProject;
3029
import org.apache.maven.project.ProjectBuilder;
31-
import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
32-
import org.apache.maven.shared.artifact.filter.collection.ClassifierFilter;
33-
import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
34-
import org.apache.maven.shared.artifact.filter.collection.GroupIdFilter;
35-
import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
36-
import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
3730
import org.sonatype.plexus.build.incremental.BuildContext;
3831

3932
/**
@@ -58,14 +51,6 @@ public abstract class AbstractResolveMojo extends AbstractDependencyFilterMojo {
5851
@Parameter(property = "appendOutput", defaultValue = "false")
5952
protected boolean appendOutput;
6053

61-
/**
62-
* Don't resolve plugins that are in the current reactor.
63-
*
64-
* @since 2.7
65-
*/
66-
@Parameter(property = "excludeReactor", defaultValue = "true")
67-
protected boolean excludeReactor;
68-
6954
protected AbstractResolveMojo(
7055
MavenSession session,
7156
BuildContext buildContext,
@@ -75,37 +60,4 @@ protected AbstractResolveMojo(
7560
ArtifactHandlerManager artifactHandlerManager) {
7661
super(session, buildContext, project, resolverUtil, projectBuilder, artifactHandlerManager);
7762
}
78-
79-
/**
80-
* @return {@link FilterArtifacts}
81-
*/
82-
protected FilterArtifacts getArtifactsFilter() {
83-
final FilterArtifacts filter = new FilterArtifacts();
84-
85-
if (excludeReactor) {
86-
filter.addFilter(new ExcludeReactorProjectsArtifactFilter(reactorProjects, getLog()));
87-
}
88-
89-
filter.addFilter(new ScopeFilter(
90-
DependencyUtil.cleanToBeTokenizedString(this.includeScope),
91-
DependencyUtil.cleanToBeTokenizedString(this.excludeScope)));
92-
93-
filter.addFilter(new TypeFilter(
94-
DependencyUtil.cleanToBeTokenizedString(this.includeTypes),
95-
DependencyUtil.cleanToBeTokenizedString(this.excludeTypes)));
96-
97-
filter.addFilter(new ClassifierFilter(
98-
DependencyUtil.cleanToBeTokenizedString(this.includeClassifiers),
99-
DependencyUtil.cleanToBeTokenizedString(this.excludeClassifiers)));
100-
101-
filter.addFilter(new GroupIdFilter(
102-
DependencyUtil.cleanToBeTokenizedString(this.includeGroupIds),
103-
DependencyUtil.cleanToBeTokenizedString(this.excludeGroupIds)));
104-
105-
filter.addFilter(new ArtifactIdFilter(
106-
DependencyUtil.cleanToBeTokenizedString(this.includeArtifactIds),
107-
DependencyUtil.cleanToBeTokenizedString(this.excludeArtifactIds)));
108-
109-
return filter;
110-
}
11163
}

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

Lines changed: 130 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,49 @@
2020

2121
import javax.inject.Inject;
2222

23+
import java.util.Arrays;
2324
import java.util.Collection;
2425
import java.util.HashSet;
25-
import java.util.LinkedHashSet;
26+
import java.util.List;
2627
import java.util.Set;
28+
import java.util.function.Predicate;
2729
import java.util.stream.Collectors;
2830

31+
import org.apache.maven.RepositoryUtils;
2932
import org.apache.maven.artifact.Artifact;
3033
import org.apache.maven.artifact.DefaultArtifact;
3134
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
3235
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
3336
import org.apache.maven.artifact.repository.ArtifactRepository;
3437
import org.apache.maven.execution.MavenSession;
3538
import org.apache.maven.model.Dependency;
39+
import org.apache.maven.model.Plugin;
3640
import org.apache.maven.plugin.MojoExecutionException;
3741
import org.apache.maven.plugins.annotations.Mojo;
42+
import org.apache.maven.plugins.annotations.Parameter;
43+
import org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo;
3844
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
3945
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
46+
import org.apache.maven.project.DefaultProjectBuildingRequest;
4047
import org.apache.maven.project.MavenProject;
4148
import org.apache.maven.project.ProjectBuilder;
4249
import org.apache.maven.project.ProjectBuildingRequest;
4350
import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
51+
import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
4452
import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
53+
import org.apache.maven.shared.artifact.filter.collection.ClassifierFilter;
4554
import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
55+
import org.apache.maven.shared.artifact.filter.collection.GroupIdFilter;
56+
import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
57+
import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
4658
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
4759
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
4860
import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
4961
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
5062
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
5163
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
64+
import org.eclipse.aether.resolution.ArtifactResolutionException;
65+
import org.eclipse.aether.resolution.DependencyResolutionException;
5266
import org.sonatype.plexus.build.incremental.BuildContext;
5367

5468
/**
@@ -60,7 +74,21 @@
6074
* @since 2.0
6175
*/
6276
@Mojo(name = "go-offline", threadSafe = true)
63-
public class GoOfflineMojo extends AbstractResolveMojo {
77+
public class GoOfflineMojo extends AbstractDependencyFilterMojo {
78+
79+
/**
80+
* Remote repositories which will be searched for artifacts.
81+
*/
82+
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
83+
private List<ArtifactRepository> remoteRepositories;
84+
85+
/**
86+
* Don't resolve plugins and artifacts that are in the current reactor.
87+
*
88+
* @since 2.7
89+
*/
90+
@Parameter(property = "excludeReactor", defaultValue = "true")
91+
protected boolean excludeReactor;
6492

6593
private final DependencyResolver dependencyResolver;
6694

@@ -89,25 +117,47 @@ public GoOfflineMojo(
89117
protected void doExecute() throws MojoExecutionException {
90118

91119
try {
92-
final Set<Artifact> plugins = resolvePluginArtifacts();
120+
final Set<Plugin> plugins = getProjectPlugins();
121+
122+
for (Plugin plugin : plugins) {
123+
org.eclipse.aether.artifact.Artifact artifact =
124+
getResolverUtil().resolvePlugin(plugin);
125+
126+
logMessage("Resolved plugin: "
127+
+ DependencyUtil.getFormattedFileName(RepositoryUtils.toArtifact(artifact), false));
128+
if (!excludeTransitive) {
129+
logMessage("Resolved plugin dependency:");
130+
List<org.eclipse.aether.artifact.Artifact> artifacts =
131+
getResolverUtil().resolveDependencies(plugin);
132+
for (org.eclipse.aether.artifact.Artifact a : artifacts) {
133+
logMessage(
134+
" " + DependencyUtil.getFormattedFileName(RepositoryUtils.toArtifact(a), false));
135+
}
136+
}
137+
}
93138

94139
final Set<Artifact> dependencies = resolveDependencyArtifacts();
95140

96-
if (!isSilent()) {
97-
for (Artifact artifact : plugins) {
98-
this.getLog().info("Resolved plugin: " + DependencyUtil.getFormattedFileName(artifact, false));
99-
}
100-
101-
for (Artifact artifact : dependencies) {
102-
this.getLog().info("Resolved dependency: " + DependencyUtil.getFormattedFileName(artifact, false));
103-
}
141+
for (Artifact artifact : dependencies) {
142+
logMessage("Resolved dependency: " + DependencyUtil.getFormattedFileName(artifact, false));
104143
}
105144

106-
} catch (DependencyResolverException | ArtifactFilterException e) {
145+
} catch (DependencyResolverException
146+
| ArtifactFilterException
147+
| ArtifactResolutionException
148+
| DependencyResolutionException e) {
107149
throw new MojoExecutionException(e.getMessage(), e);
108150
}
109151
}
110152

153+
private void logMessage(String message) {
154+
if (isSilent()) {
155+
getLog().debug(message);
156+
} else {
157+
getLog().info(message);
158+
}
159+
}
160+
111161
/**
112162
* This method resolves the dependency artifacts from the project.
113163
*
@@ -164,31 +214,30 @@ private TransformableFilter getTransformableFilter() {
164214
}
165215

166216
/**
167-
* This method resolves the plugin artifacts from the project.
217+
* This method retrieve plugins list from the project.
168218
*
169-
* @return set of resolved plugin artifacts
170-
* @throws ArtifactFilterException
171-
* @throws DependencyResolverException in case of an error while resolving the artifacts
219+
* @return set of plugin used in project
172220
*/
173-
protected Set<Artifact> resolvePluginArtifacts() throws DependencyResolverException, ArtifactFilterException {
174-
175-
Set<Artifact> plugins = getProject().getPluginArtifacts();
176-
Set<Artifact> reports = getProject().getReportArtifacts();
177-
178-
Set<Artifact> artifacts = new LinkedHashSet<>();
179-
artifacts.addAll(reports);
180-
artifacts.addAll(plugins);
181-
182-
final FilterArtifacts filter = getArtifactsFilter();
183-
artifacts = filter.filter(artifacts);
221+
private Set<Plugin> getProjectPlugins() {
222+
Predicate<Plugin> pluginsFilter = new PluginsIncludeExcludeFilter(
223+
toList(includeGroupIds),
224+
toList(excludeGroupIds),
225+
toList(includeArtifactIds),
226+
toList(excludeArtifactIds));
227+
228+
Predicate<Plugin> reactorExclusionFilter = plugin -> true;
229+
if (excludeReactor) {
230+
reactorExclusionFilter = new PluginsReactorExcludeFilter(session.getProjects());
231+
}
184232

185-
Set<DependableCoordinate> dependableCoordinates = artifacts.stream()
186-
.map(this::createDependendableCoordinateFromArtifact)
233+
return getResolverUtil().getProjectPlugins(getProject()).stream()
234+
.filter(reactorExclusionFilter)
235+
.filter(pluginsFilter)
187236
.collect(Collectors.toSet());
237+
}
188238

189-
ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();
190-
191-
return resolveDependableCoordinate(buildingRequest, dependableCoordinates, "plugins");
239+
private List<String> toList(String list) {
240+
return Arrays.asList(DependencyUtil.cleanToBeTokenizedString(list).split(","));
192241
}
193242

194243
private Collection<Dependency> filterDependencies(Collection<Dependency> deps) throws ArtifactFilterException {
@@ -201,17 +250,6 @@ private Collection<Dependency> filterDependencies(Collection<Dependency> deps) t
201250
return createDependencySetFromArtifacts(artifacts);
202251
}
203252

204-
private DependableCoordinate createDependendableCoordinateFromArtifact(final Artifact artifact) {
205-
final DefaultDependableCoordinate result = new DefaultDependableCoordinate();
206-
result.setGroupId(artifact.getGroupId());
207-
result.setArtifactId(artifact.getArtifactId());
208-
result.setVersion(artifact.getVersion());
209-
result.setType(artifact.getType());
210-
result.setClassifier(artifact.getClassifier());
211-
212-
return result;
213-
}
214-
215253
private DependableCoordinate createDependendableCoordinateFromDependency(final Dependency dependency) {
216254
final DefaultDependableCoordinate result = new DefaultDependableCoordinate();
217255
result.setGroupId(dependency.getGroupId());
@@ -256,6 +294,55 @@ private Collection<Dependency> createDependencySetFromArtifacts(Set<Artifact> ar
256294
return dependencies;
257295
}
258296

297+
/**
298+
* @return {@link FilterArtifacts}
299+
*/
300+
protected FilterArtifacts getArtifactsFilter() {
301+
final FilterArtifacts filter = new FilterArtifacts();
302+
303+
if (excludeReactor) {
304+
filter.addFilter(new ExcludeReactorProjectsArtifactFilter(reactorProjects, getLog()));
305+
}
306+
307+
filter.addFilter(new ScopeFilter(
308+
DependencyUtil.cleanToBeTokenizedString(this.includeScope),
309+
DependencyUtil.cleanToBeTokenizedString(this.excludeScope)));
310+
311+
filter.addFilter(new TypeFilter(
312+
DependencyUtil.cleanToBeTokenizedString(this.includeTypes),
313+
DependencyUtil.cleanToBeTokenizedString(this.excludeTypes)));
314+
315+
filter.addFilter(new ClassifierFilter(
316+
DependencyUtil.cleanToBeTokenizedString(this.includeClassifiers),
317+
DependencyUtil.cleanToBeTokenizedString(this.excludeClassifiers)));
318+
319+
filter.addFilter(new GroupIdFilter(
320+
DependencyUtil.cleanToBeTokenizedString(this.includeGroupIds),
321+
DependencyUtil.cleanToBeTokenizedString(this.excludeGroupIds)));
322+
323+
filter.addFilter(new ArtifactIdFilter(
324+
DependencyUtil.cleanToBeTokenizedString(this.includeArtifactIds),
325+
DependencyUtil.cleanToBeTokenizedString(this.excludeArtifactIds)));
326+
327+
return filter;
328+
}
329+
330+
/**
331+
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
332+
* repositories, used to resolve artifacts
333+
*/
334+
public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() {
335+
return newProjectBuildingRequest(remoteRepositories);
336+
}
337+
338+
private ProjectBuildingRequest newProjectBuildingRequest(List<ArtifactRepository> repositories) {
339+
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
340+
341+
buildingRequest.setRemoteRepositories(repositories);
342+
343+
return buildingRequest;
344+
}
345+
259346
@Override
260347
protected ArtifactsFilter getMarkedArtifactFilter() {
261348
return null;

0 commit comments

Comments
 (0)