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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -238,21 +238,6 @@ under the License.
<artifactId>maven-common-artifact-filters</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-artifact-transfer</artifactId>
<version>0.13.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-shared-utils</artifactId>
Expand Down
6 changes: 6 additions & 0 deletions src/it/projects/purge-local-repository-bad-dep/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,11 @@
<artifactId>purge-local-repository</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>2.0.9</version>
<classifier>sources</classifier>
</dependency>
</dependencies>
</project>
3 changes: 3 additions & 0 deletions src/it/projects/purge-local-repository-bad-dep/verify.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,13 @@ void checkFilePresence( String path )

checkFilePresence( "org/apache/maven/its/dependency/purge-local-repository/1.0/purge-local-repository-1.0.jar" )
checkFilePresence( "org/apache/maven/its/dependency/purge-local-repository/1.0/purge-local-repository-1.0.pom" )
checkFilePresence( "org/apache/maven/maven-model/2.0.9/maven-model-2.0.9-sources.jar" )

String buildLog = new File( basedir, "build.log" ).getText( "UTF-8" )
assert buildLog.contains( 'Unable to resolve artifact: org.apache.maven.its.dependency:i-do-not-exist:jar:1.0' )
assert buildLog.contains( 'Purging artifact: org.apache.maven.its.dependency:purge-local-repository:jar:1.0' )
assert buildLog.contains( 'Resolving artifact: org.apache.maven.its.dependency:purge-local-repository:jar:1.0' )
assert buildLog.contains( 'Purging artifact: org.apache.maven:maven-model:jar:sources:2.0.9' )
assert buildLog.contains( 'Resolving artifact: org.apache.maven:maven-model:jar:sources:2.0.9' )

return true
12 changes: 12 additions & 0 deletions src/it/projects/purge-local-repository/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@
<artifactId>purged</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.its.dependency</groupId>
<artifactId>not-purged-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.its.dependency</groupId>
<artifactId>not-purged-provided</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

</project>
39 changes: 36 additions & 3 deletions src/it/projects/purge-local-repository/setup.bsh
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,42 @@

import java.io.*;

File purgedJar = new File( localRepositoryPath, "org/apache/maven/its/dependency/purged/1.0/purged-1.0.jar" );
void createJar( String artifactId )
{
File jar = new File( localRepositoryPath,
"org/apache/maven/its/dependency/" + artifactId + "/1.0/" + artifactId + "-1.0.jar" );
jar.getParentFile().mkdirs();
jar.createNewFile();
}

purgedJar.getParentFile().mkdirs();
purgedJar.createNewFile();
createJar( "purged" );
createJar( "not-purged-test" );
createJar( "not-purged-provided" );
createJar( "not-purged-optional" );

File purgedPom = new File( localRepositoryPath,
"org/apache/maven/its/dependency/purged/1.0/purged-1.0.pom" );
PrintWriter writer = new PrintWriter( purgedPom, "UTF-8" );
try
{
writer.println( "<project>" );
writer.println( " <modelVersion>4.0.0</modelVersion>" );
writer.println( " <groupId>org.apache.maven.its.dependency</groupId>" );
writer.println( " <artifactId>purged</artifactId>" );
writer.println( " <version>1.0</version>" );
writer.println( " <dependencies>" );
writer.println( " <dependency>" );
writer.println( " <groupId>org.apache.maven.its.dependency</groupId>" );
writer.println( " <artifactId>not-purged-optional</artifactId>" );
writer.println( " <version>1.0</version>" );
writer.println( " <optional>true</optional>" );
writer.println( " </dependency>" );
writer.println( " </dependencies>" );
writer.println( "</project>" );
}
finally
{
writer.close();
}

return true;
12 changes: 12 additions & 0 deletions src/it/projects/purge-local-repository/verify.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,19 @@ void checkFileAbsence( String path )
}
}

void checkFilePresence( String path )
{
File depJar = new File( localRepositoryPath, path )
if ( !depJar.exists() )
{
throw new Exception( "Dependency jar was purged: " + depJar )
}
}

checkFileAbsence( "org/apache/maven/its/dependency/purged/1.0/purged-1.0.jar" )
checkFilePresence( "org/apache/maven/its/dependency/not-purged-test/1.0/not-purged-test-1.0.jar" )
checkFilePresence( "org/apache/maven/its/dependency/not-purged-provided/1.0/not-purged-provided-1.0.jar" )
checkFilePresence( "org/apache/maven/its/dependency/not-purged-optional/1.0/not-purged-optional-1.0.jar" )

String buildLog = new File( basedir, "build.log" ).getText( "UTF-8" )
assert buildLog.contains( 'Deleting 1 transitive dependency for project test from ' )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.resolution.ArtifactDescriptorException;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.DependencyResolutionException;
Expand Down Expand Up @@ -101,7 +102,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
List<RemoteRepository> repositories;
try {
artifact = resolverUtil.createArtifactFromParams(paramArtifact);
repositories = resolverUtil.remoteRepositories(remoteRepositories);
repositories = resolverUtil.remoteRepositories(remoteRepositories, RepositoryPolicy.UPDATE_POLICY_ALWAYS);
} catch (IllegalArgumentException e) {
throw new MojoFailureException(e.getMessage(), e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
Expand All @@ -44,6 +45,7 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.dependency.utils.ResolverUtil;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
Expand All @@ -53,16 +55,14 @@
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.filter.resolve.transform.ArtifactIncludeFilterTransformer;
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
import org.apache.maven.shared.transfer.artifact.TransferUtils;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
import org.apache.maven.shared.utils.logging.MessageBuilder;
import org.apache.maven.shared.utils.logging.MessageUtils;
import org.codehaus.plexus.util.FileUtils;
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.resolution.ArtifactDescriptorException;
import org.eclipse.aether.resolution.DependencyResolutionException;

/**
* When run on a project, remove the project dependencies from the local repository, and optionally re-resolve them.
Expand All @@ -87,20 +87,7 @@ public class PurgeLocalRepositoryMojo extends AbstractMojo {

private final MavenSession session;

/**
* Artifact handler manager.
*/
private final ArtifactHandlerManager artifactHandlerManager;

/**
* The dependency resolver.
*/
private final DependencyResolver dependencyResolver;

/**
* The artifact resolver used to re-resolve dependencies, if that option is enabled.
*/
private final ArtifactResolver artifactResolver;
private final ResolverUtil resolverUtil;

/**
* The Maven projects in the reactor.
Expand Down Expand Up @@ -221,17 +208,10 @@ public class PurgeLocalRepositoryMojo extends AbstractMojo {
private boolean skip;

@Inject
public PurgeLocalRepositoryMojo(
MavenProject project,
MavenSession session,
ArtifactHandlerManager artifactHandlerManager,
DependencyResolver dependencyResolver,
ArtifactResolver artifactResolver) {
public PurgeLocalRepositoryMojo(MavenProject project, MavenSession session, ResolverUtil resolverUtil) {
this.session = session;
this.project = project;
this.artifactHandlerManager = artifactHandlerManager;
this.dependencyResolver = dependencyResolver;
this.artifactResolver = artifactResolver;
this.resolverUtil = resolverUtil;
}

/**
Expand Down Expand Up @@ -521,18 +501,31 @@ private List<String> parseIncludes(String theInclude) {

private Set<Artifact> getFilteredResolvedArtifacts(
MavenProject theProject, List<Dependency> dependencies, TransformableFilter filter) {
try {
Iterable<ArtifactResult> results = dependencyResolver.resolveDependencies(
session.getProjectBuildingRequest(), theProject.getModel(), filter);

Set<Artifact> resolvedArtifacts = new LinkedHashSet<>();

for (ArtifactResult artResult : results) {
resolvedArtifacts.add(artResult.getArtifact());
}
ArtifactTypeRegistry artifactTypeRegistry =
session.getRepositorySession().getArtifactTypeRegistry();
List<org.eclipse.aether.graph.Dependency> resolverDependencies = dependencies.stream()
.map(dependency -> RepositoryUtils.toDependency(dependency, artifactTypeRegistry))
.collect(Collectors.toList());
List<org.eclipse.aether.graph.Dependency> managedDependencies = theProject.getDependencyManagement() == null
? null
: theProject.getDependencyManagement().getDependencies().stream()
.map(dependency -> RepositoryUtils.toDependency(dependency, artifactTypeRegistry))
.collect(Collectors.toList());
DependencyFilter dependencyFilter = filter.transform(new EclipseAetherFilterTransformer());

return resolvedArtifacts;
} catch (DependencyResolverException e) {
try {
return resolverUtil
.resolveDependenciesForArtifact(
RepositoryUtils.toArtifact(theProject.getArtifact()),
resolverDependencies,
managedDependencies,
theProject.getRemoteProjectRepositories(),
dependencyFilter)
.stream()
.map(RepositoryUtils::toArtifact)
.collect(Collectors.toCollection(LinkedHashSet::new));
} catch (DependencyResolutionException e) {
getLog().debug("Unable to resolve all dependencies for: " + getProjectKey(theProject), e);
getLog().info("Unable to resolve all dependencies for: " + getProjectKey(theProject)
+ ". Falling back to non-transitive mode for initial artifact resolution.");
}
Expand All @@ -541,23 +534,16 @@ private Set<Artifact> getFilteredResolvedArtifacts(

ArtifactFilter artifactFilter = filter.transform(new ArtifactIncludeFilterTransformer());

for (Dependency dependency : dependencies) {
DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
coordinate.setGroupId(dependency.getGroupId());
coordinate.setArtifactId(dependency.getArtifactId());
coordinate.setVersion(dependency.getVersion());
coordinate.setExtension(artifactHandlerManager
.getArtifactHandler(dependency.getType())
.getExtension());
for (org.eclipse.aether.graph.Dependency dependency : resolverDependencies) {
org.eclipse.aether.artifact.Artifact coordinate = dependency.getArtifact();
try {
Artifact artifact = artifactResolver
.resolveArtifact(session.getProjectBuildingRequest(), coordinate)
.getArtifact();
Artifact artifact = RepositoryUtils.toArtifact(
resolverUtil.resolveArtifact(coordinate, theProject.getRemoteProjectRepositories()));
if (artifactFilter.include(artifact)) {
resolvedArtifacts.add(artifact);
}
} catch (ArtifactResolverException e) {
getLog().debug("Unable to resolve artifact: " + coordinate);
} catch (org.eclipse.aether.resolution.ArtifactResolutionException | ArtifactDescriptorException e) {
getLog().debug("Unable to resolve artifact: " + coordinate, e);
}
}
return resolvedArtifacts;
Expand Down Expand Up @@ -606,27 +592,14 @@ private void purgeArtifacts(MavenProject theProject, Set<Artifact> artifacts) {

private void reResolveArtifacts(MavenProject theProject, Set<Artifact> artifacts)
throws ArtifactResolutionException {
// Always need to re-resolve the poms in case they were purged along with the artifact
// because Maven 2 will not automatically re-resolve them when resolving the artifact
for (Artifact artifact : artifacts) {
verbose("Resolving artifact: " + artifact.getId());

try {
// CHECKSTYLE_OFF: LineLength
artifactResolver.resolveArtifact(
session.getProjectBuildingRequest(), TransferUtils.toArtifactCoordinate(artifact));
// CHECKSTYLE_ON: LineLength
} catch (ArtifactResolverException e) {
verbose(e.getMessage());
}
}

List<Artifact> missingArtifacts = new ArrayList<>();

for (Artifact artifact : artifacts) {
verbose("Resolving artifact: " + artifact.getId());
try {
artifactResolver.resolveArtifact(session.getProjectBuildingRequest(), artifact);
} catch (ArtifactResolverException e) {
resolverUtil.resolveArtifact(
RepositoryUtils.toArtifact(artifact), theProject.getRemoteProjectRepositories());
} catch (org.eclipse.aether.resolution.ArtifactResolutionException | ArtifactDescriptorException e) {
verbose(e.getMessage());
missingArtifacts.add(artifact);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
import org.codehaus.plexus.components.io.filemappers.FileMapper;

/**
Expand All @@ -34,7 +33,7 @@
* @author <a href="mailto:brianf@apache.org">Brian Fox</a>
* @since 1.0
*/
public class ArtifactItem implements DependableCoordinate {
public class ArtifactItem {
/**
* Group ID of artifact.
*/
Expand Down Expand Up @@ -142,7 +141,6 @@ private String filterEmptyString(String in) {
/**
* @return returns the artifact ID
*/
@Override
public String getArtifactId() {
return artifactId;
}
Expand All @@ -157,7 +155,6 @@ public void setArtifactId(String theArtifact) {
/**
* @return returns the group ID
*/
@Override
public String getGroupId() {
return groupId;
}
Expand All @@ -172,7 +169,6 @@ public void setGroupId(String groupId) {
/**
* @return returns the type
*/
@Override
public String getType() {
return type;
}
Expand All @@ -187,7 +183,6 @@ public void setType(String type) {
/**
* @return returns the version
*/
@Override
public String getVersion() {
return version;
}
Expand All @@ -209,7 +204,6 @@ public String getBaseVersion() {
/**
* @return classifier
*/
@Override
public String getClassifier() {
return classifier;
}
Expand Down
Loading