Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,36 +20,21 @@

import java.util.List;

import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.SystemStreamLog;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.dependency.utils.DependencySilentLog;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.sonatype.plexus.build.incremental.BuildContext;

/**
* @author <a href="mailto:brianf@apache.org">Brian Fox</a>
*/
public abstract class AbstractDependencyMojo extends AbstractMojo {

/**
* Remote repositories which will be searched for artifacts.
*/
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
private List<ArtifactRepository> remoteRepositories;

/**
* Remote repositories which will be searched for plugins.
*/
@Parameter(defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true)
private List<ArtifactRepository> remotePluginRepositories;

/**
* Contains the full list of projects in the reactor.
*/
Expand Down Expand Up @@ -125,30 +110,6 @@ public final void execute() throws MojoExecutionException, MojoFailureException
*/
protected abstract void doExecute() throws MojoExecutionException, MojoFailureException;

/**
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
* repositories, used to resolve artifacts
*/
public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() {
return newProjectBuildingRequest(remoteRepositories);
}

/**
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
* repositories, used to resolve plugins
*/
protected ProjectBuildingRequest newResolvePluginProjectBuildingRequest() {
return newProjectBuildingRequest(remotePluginRepositories);
}

private ProjectBuildingRequest newProjectBuildingRequest(List<ArtifactRepository> repositories) {
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());

buildingRequest.setRemoteRepositories(repositories);

return buildingRequest;
}

/**
* @return returns the project
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,9 @@
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo;
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
import org.apache.maven.shared.artifact.filter.collection.ClassifierFilter;
import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
import org.apache.maven.shared.artifact.filter.collection.GroupIdFilter;
import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
import org.sonatype.plexus.build.incremental.BuildContext;

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

/**
* Don't resolve plugins that are in the current reactor.
*
* @since 2.7
*/
@Parameter(property = "excludeReactor", defaultValue = "true")
protected boolean excludeReactor;

protected AbstractResolveMojo(
MavenSession session,
BuildContext buildContext,
Expand All @@ -75,37 +60,4 @@ protected AbstractResolveMojo(
ArtifactHandlerManager artifactHandlerManager) {
super(session, buildContext, project, resolverUtil, projectBuilder, artifactHandlerManager);
}

/**
* @return {@link FilterArtifacts}
*/
protected FilterArtifacts getArtifactsFilter() {
final FilterArtifacts filter = new FilterArtifacts();

if (excludeReactor) {
filter.addFilter(new ExcludeReactorProjectsArtifactFilter(reactorProjects, getLog()));
}

filter.addFilter(new ScopeFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeScope),
DependencyUtil.cleanToBeTokenizedString(this.excludeScope)));

filter.addFilter(new TypeFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeTypes),
DependencyUtil.cleanToBeTokenizedString(this.excludeTypes)));

filter.addFilter(new ClassifierFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeClassifiers),
DependencyUtil.cleanToBeTokenizedString(this.excludeClassifiers)));

filter.addFilter(new GroupIdFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeGroupIds),
DependencyUtil.cleanToBeTokenizedString(this.excludeGroupIds)));

filter.addFilter(new ArtifactIdFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeArtifactIds),
DependencyUtil.cleanToBeTokenizedString(this.excludeArtifactIds)));

return filter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,49 @@

import javax.inject.Inject;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo;
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
import org.apache.maven.shared.artifact.filter.collection.ClassifierFilter;
import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
import org.apache.maven.shared.artifact.filter.collection.GroupIdFilter;
import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.sonatype.plexus.build.incremental.BuildContext;

/**
Expand All @@ -60,7 +74,21 @@
* @since 2.0
*/
@Mojo(name = "go-offline", threadSafe = true)
public class GoOfflineMojo extends AbstractResolveMojo {
public class GoOfflineMojo extends AbstractDependencyFilterMojo {

/**
* Remote repositories which will be searched for artifacts.
*/
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
private List<ArtifactRepository> remoteRepositories;

/**
* Don't resolve plugins and artifacts that are in the current reactor.
*
* @since 2.7
*/
@Parameter(property = "excludeReactor", defaultValue = "true")
protected boolean excludeReactor;

private final DependencyResolver dependencyResolver;

Expand Down Expand Up @@ -89,25 +117,47 @@ public GoOfflineMojo(
protected void doExecute() throws MojoExecutionException {

try {
final Set<Artifact> plugins = resolvePluginArtifacts();
final Set<Plugin> plugins = getProjectPlugins();

for (Plugin plugin : plugins) {
org.eclipse.aether.artifact.Artifact artifact =
getResolverUtil().resolvePlugin(plugin);

logMessage("Resolved plugin: "
+ DependencyUtil.getFormattedFileName(RepositoryUtils.toArtifact(artifact), false));
if (!excludeTransitive) {
logMessage("Resolved plugin dependency:");
List<org.eclipse.aether.artifact.Artifact> artifacts =
getResolverUtil().resolveDependencies(plugin);
for (org.eclipse.aether.artifact.Artifact a : artifacts) {
logMessage(
" " + DependencyUtil.getFormattedFileName(RepositoryUtils.toArtifact(a), false));
}
}
}

final Set<Artifact> dependencies = resolveDependencyArtifacts();

if (!isSilent()) {
for (Artifact artifact : plugins) {
this.getLog().info("Resolved plugin: " + DependencyUtil.getFormattedFileName(artifact, false));
}

for (Artifact artifact : dependencies) {
this.getLog().info("Resolved dependency: " + DependencyUtil.getFormattedFileName(artifact, false));
}
for (Artifact artifact : dependencies) {
logMessage("Resolved dependency: " + DependencyUtil.getFormattedFileName(artifact, false));
}

} catch (DependencyResolverException | ArtifactFilterException e) {
} catch (DependencyResolverException
| ArtifactFilterException
| ArtifactResolutionException
| DependencyResolutionException e) {
throw new MojoExecutionException(e.getMessage(), e);
}
}

private void logMessage(String message) {
if (isSilent()) {
getLog().debug(message);
} else {
getLog().info(message);
}
}

/**
* This method resolves the dependency artifacts from the project.
*
Expand Down Expand Up @@ -164,31 +214,30 @@ private TransformableFilter getTransformableFilter() {
}

/**
* This method resolves the plugin artifacts from the project.
* This method retrieve plugins list from the project.
*
* @return set of resolved plugin artifacts
* @throws ArtifactFilterException
* @throws DependencyResolverException in case of an error while resolving the artifacts
* @return set of plugin used in project
*/
protected Set<Artifact> resolvePluginArtifacts() throws DependencyResolverException, ArtifactFilterException {

Set<Artifact> plugins = getProject().getPluginArtifacts();
Set<Artifact> reports = getProject().getReportArtifacts();

Set<Artifact> artifacts = new LinkedHashSet<>();
artifacts.addAll(reports);
artifacts.addAll(plugins);

final FilterArtifacts filter = getArtifactsFilter();
artifacts = filter.filter(artifacts);
private Set<Plugin> getProjectPlugins() {
Predicate<Plugin> pluginsFilter = new PluginsIncludeExcludeFilter(
toList(includeGroupIds),
toList(excludeGroupIds),
toList(includeArtifactIds),
toList(excludeArtifactIds));

Predicate<Plugin> reactorExclusionFilter = plugin -> true;
if (excludeReactor) {
reactorExclusionFilter = new PluginsReactorExcludeFilter(session.getProjects());
}

Set<DependableCoordinate> dependableCoordinates = artifacts.stream()
.map(this::createDependendableCoordinateFromArtifact)
return getResolverUtil().getProjectPlugins(getProject()).stream()
.filter(reactorExclusionFilter)
.filter(pluginsFilter)
.collect(Collectors.toSet());
}

ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();

return resolveDependableCoordinate(buildingRequest, dependableCoordinates, "plugins");
private List<String> toList(String list) {
return Arrays.asList(DependencyUtil.cleanToBeTokenizedString(list).split(","));
}

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

private DependableCoordinate createDependendableCoordinateFromArtifact(final Artifact artifact) {
final DefaultDependableCoordinate result = new DefaultDependableCoordinate();
result.setGroupId(artifact.getGroupId());
result.setArtifactId(artifact.getArtifactId());
result.setVersion(artifact.getVersion());
result.setType(artifact.getType());
result.setClassifier(artifact.getClassifier());

return result;
}

private DependableCoordinate createDependendableCoordinateFromDependency(final Dependency dependency) {
final DefaultDependableCoordinate result = new DefaultDependableCoordinate();
result.setGroupId(dependency.getGroupId());
Expand Down Expand Up @@ -256,6 +294,55 @@ private Collection<Dependency> createDependencySetFromArtifacts(Set<Artifact> ar
return dependencies;
}

/**
* @return {@link FilterArtifacts}
*/
protected FilterArtifacts getArtifactsFilter() {
final FilterArtifacts filter = new FilterArtifacts();

if (excludeReactor) {
filter.addFilter(new ExcludeReactorProjectsArtifactFilter(reactorProjects, getLog()));
}

filter.addFilter(new ScopeFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeScope),
DependencyUtil.cleanToBeTokenizedString(this.excludeScope)));

filter.addFilter(new TypeFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeTypes),
DependencyUtil.cleanToBeTokenizedString(this.excludeTypes)));

filter.addFilter(new ClassifierFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeClassifiers),
DependencyUtil.cleanToBeTokenizedString(this.excludeClassifiers)));

filter.addFilter(new GroupIdFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeGroupIds),
DependencyUtil.cleanToBeTokenizedString(this.excludeGroupIds)));

filter.addFilter(new ArtifactIdFilter(
DependencyUtil.cleanToBeTokenizedString(this.includeArtifactIds),
DependencyUtil.cleanToBeTokenizedString(this.excludeArtifactIds)));

return filter;
}

/**
* @return returns a new ProjectBuildingRequest populated from the current session and the current project remote
* repositories, used to resolve artifacts
*/
public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() {
return newProjectBuildingRequest(remoteRepositories);
}

private ProjectBuildingRequest newProjectBuildingRequest(List<ArtifactRepository> repositories) {
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());

buildingRequest.setRemoteRepositories(repositories);

return buildingRequest;
}

@Override
protected ArtifactsFilter getMarkedArtifactFilter() {
return null;
Expand Down
Loading
Loading