You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2016/01/01 21:28:15 UTC
svn commit: r1722568 - in /maven/plugins/trunk/maven-assembly-plugin: ./
src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/
src/main/java/org/apache/maven/plugins/assembly/repository/
Author: rfscholte
Date: Fri Jan 1 20:28:15 2016
New Revision: 1722568
URL: http://svn.apache.org/viewvc?rev=1722568&view=rev
Log:
Switch to maven-artifact-transfer resolvers
Modified:
maven/plugins/trunk/maven-assembly-plugin/pom.xml
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/RepoBuilderConfigSourceWrapper.java
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/DefaultRepositoryAssembler.java
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/RepositoryBuilderConfigSource.java
Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=1722568&r1=1722567&r2=1722568&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Fri Jan 1 20:28:15 2016
@@ -105,12 +105,19 @@ under the License.
<artifactId>maven-model</artifactId>
<version>${mavenVersion}</version>
</dependency>
+
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-common-artifact-filters</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-artifact-transfer</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.1</version>
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/RepoBuilderConfigSourceWrapper.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/RepoBuilderConfigSourceWrapper.java?rev=1722568&r1=1722567&r2=1722568&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/RepoBuilderConfigSourceWrapper.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/archive/phase/wrappers/RepoBuilderConfigSourceWrapper.java Fri Jan 1 20:28:15 2016
@@ -23,6 +23,7 @@ import org.apache.maven.artifact.reposit
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
import org.apache.maven.plugins.assembly.repository.RepositoryBuilderConfigSource;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
/**
* @version $Id$
@@ -50,4 +51,9 @@ public class RepoBuilderConfigSourceWrap
return configSource.getProject();
}
+ @Override
+ public ProjectBuildingRequest getProjectBuildingRequest()
+ {
+ return configSource.getMavenSession().getProjectBuildingRequest();
+ }
}
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/DefaultRepositoryAssembler.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/DefaultRepositoryAssembler.java?rev=1722568&r1=1722567&r2=1722568&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/DefaultRepositoryAssembler.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/DefaultRepositoryAssembler.java Fri Jan 1 20:28:15 2016
@@ -33,8 +33,6 @@ import org.apache.maven.artifact.reposit
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
@@ -49,22 +47,23 @@ import org.apache.maven.project.DefaultM
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.TransferUtils;
import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;
import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
import org.apache.maven.shared.artifact.filter.ScopeArtifactFilter;
+import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
+import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
+import org.apache.maven.shared.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.dependency.resolve.DependencyResolver;
+import org.apache.maven.shared.dependency.resolve.DependencyResolverException;
+import org.apache.maven.shared.repository.RepositoryManager;
import org.apache.maven.shared.utils.io.FileUtils;
import org.apache.maven.shared.utils.io.IOUtil;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.logging.console.ConsoleLogger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
import java.io.File;
import java.io.FileInputStream;
@@ -75,7 +74,7 @@ import java.lang.reflect.Field;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@@ -95,11 +94,8 @@ import static org.apache.commons.codec.d
@Component( role = RepositoryAssembler.class )
public class DefaultRepositoryAssembler
extends AbstractLogEnabled
- implements RepositoryAssembler, Contextualizable
+ implements RepositoryAssembler
{
- private static final String[] PREFERRED_RESOLVER_HINTS = { "project-cache-aware", // Provided in Maven 2.1-SNAPSHOT
- "default" };
-
protected static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
protected static final String UTC_TIMESTAMP_PATTERN = "yyyyMMddHHmmss";
@@ -111,6 +107,7 @@ public class DefaultRepositoryAssembler
//
// @plexus.requirement
//
+ @Requirement
protected ArtifactResolver artifactResolver;
@Requirement
@@ -125,26 +122,11 @@ public class DefaultRepositoryAssembler
@Requirement
protected MavenProjectBuilder projectBuilder;
- public DefaultRepositoryAssembler()
- {
- // used for plexus init.
- }
-
- public DefaultRepositoryAssembler( ArtifactFactory artifactFactory, ArtifactResolver artifactResolver,
- ArtifactRepositoryLayout repositoryLayout,
- ArtifactRepositoryFactory artifactRepositoryFactory,
- ArtifactMetadataSource metadataSource, MavenProjectBuilder projectBuilder )
- {
- // used for testing, primarily.
- this.artifactFactory = artifactFactory;
- this.artifactResolver = artifactResolver;
- this.repositoryLayout = repositoryLayout;
- this.artifactRepositoryFactory = artifactRepositoryFactory;
- this.metadataSource = metadataSource;
- this.projectBuilder = projectBuilder;
-
- enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, getClass().getName() + "::Internal" ) );
- }
+ @Requirement
+ private DependencyResolver dependencyResolver;
+
+ @Requirement
+ private RepositoryManager repositoryManager;
public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository,
RepositoryBuilderConfigSource configSource )
@@ -152,17 +134,13 @@ public class DefaultRepositoryAssembler
{
MavenProject project = configSource.getProject();
ArtifactRepository localRepository = configSource.getLocalRepository();
+ ProjectBuildingRequest buildingRequest = configSource.getProjectBuildingRequest();
- Map<String, GroupVersionAlignment> groupVersionAlignments =
- createGroupVersionAlignments( repository.getGroupVersionAlignments() );
+ Iterable<ArtifactResult> result = null;
- ArtifactRepository targetRepository = createLocalRepository( repositoryDirectory );
-
- ArtifactResolutionResult result = null;
-
- Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts();
+ Collection<Dependency> dependencies = project.getDependencies();
- if ( dependencyArtifacts == null )
+ if ( dependencies == null )
{
Logger logger = getLogger();
@@ -174,30 +152,25 @@ public class DefaultRepositoryAssembler
return;
}
+
+ Collection<Dependency> managedDependencies = null;
+ if ( project.getDependencyManagement() != null )
+ {
+ managedDependencies = project.getDependencyManagement().getDependencies();
+ }
+ // Older Aether versions use an cache which can't be cleared. So can't delete repoDir and use it again.
+ // Instead create a temporary repository, delete it at end (should be in a finally-block)
+
+ File tempRepo = new File( repositoryDirectory.getParentFile(), repositoryDirectory.getName() + "_tmp" );
+
+ buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, tempRepo );
+
try
{
- // i have to get everything first as a filter or transformation here
- // doesn't seem to work
- // to align everything. If I use a filter to change the version on
- // the fly then I get the
- // I get JARs but no POMs, and in some directories POMs with no
- // JARs.
-
- // FIXME I'm not getting runtime dependencies here
- result = artifactResolver.resolveTransitively( dependencyArtifacts, project.getArtifact(),
- getManagedVersionMap( project ), localRepository,
- project.getRemoteArtifactRepositories(), metadataSource );
- }
- catch ( ArtifactResolutionException e )
- {
- throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e );
- }
- catch ( ArtifactNotFoundException e )
- {
- throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e );
+ result = dependencyResolver.resolveDependencies( buildingRequest, dependencies, managedDependencies, null );
}
- catch ( InvalidVersionSpecificationException e )
+ catch ( DependencyResolverException e )
{
throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e );
}
@@ -215,8 +188,14 @@ public class DefaultRepositoryAssembler
ArtifactFilter filter = buildRepositoryFilter( repository, project );
- assembleRepositoryArtifacts( result, filter, project, localRepository, targetRepository, repositoryDirectory,
- groupVersionAlignments );
+ buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, repositoryDirectory );
+
+ ArtifactRepository targetRepository = createLocalRepository( repositoryDirectory );
+
+ Map<String, GroupVersionAlignment> groupVersionAlignments =
+ createGroupVersionAlignments( repository.getGroupVersionAlignments() );
+
+ assembleRepositoryArtifacts( buildingRequest, result, filter, project, localRepository, targetRepository, groupVersionAlignments );
ArtifactRepository centralRepository = findCentralRepository( project );
@@ -227,6 +206,15 @@ public class DefaultRepositoryAssembler
addPomWithAncestry( project.getArtifact(), project.getRemoteArtifactRepositories(), localRepository,
targetRepository, groupVersionAlignments, project );
+
+ try
+ {
+ FileUtils.deleteDirectory( tempRepo );
+ }
+ catch ( IOException e )
+ {
+ // noop
+ }
}
private ArtifactFilter buildRepositoryFilter( RepositoryInfo repository, MavenProject project )
@@ -288,34 +276,25 @@ public class DefaultRepositoryAssembler
return filter;
}
- private void assembleRepositoryArtifacts( ArtifactResolutionResult result, ArtifactFilter filter,
- MavenProject project, ArtifactRepository localRepository,
- ArtifactRepository targetRepository, File repositoryDirectory,
+ private void assembleRepositoryArtifacts( ProjectBuildingRequest buildingRequest, Iterable<ArtifactResult> result,
+ ArtifactFilter filter, MavenProject project,
+ ArtifactRepository localRepository, ArtifactRepository targetRepository,
Map<String, GroupVersionAlignment> groupVersionAlignments )
- throws RepositoryAssemblyException
+ throws RepositoryAssemblyException
{
try
{
- // Now that we have the graph, let's try to align it to versions
- // that we want and remove
- // the repository we previously populated.
- FileUtils.deleteDirectory( repositoryDirectory );
-
- FileUtils.mkdir( repositoryDirectory.getAbsolutePath() );
-
- for ( Artifact a : result.getArtifacts() )
+ for ( ArtifactResult ar : result )
{
+ Artifact a = ar.getArtifact();
+
if ( filter.include( a ) )
{
getLogger().debug( "Re-resolving: " + a + " for repository assembly." );
setAlignment( a, groupVersionAlignments );
- // We need to flip it back to not being resolved so we can
- // look for it again!
- a.setResolved( false );
-
- artifactResolver.resolve( a, project.getRemoteArtifactRepositories(), localRepository );
+ artifactResolver.resolveArtifact( buildingRequest, TransferUtils.toArtifactCoordinate( a ) );
a.setVersion( a.getBaseVersion() );
@@ -329,11 +308,7 @@ public class DefaultRepositoryAssembler
}
}
}
- catch ( ArtifactResolutionException e )
- {
- throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e );
- }
- catch ( ArtifactNotFoundException e )
+ catch ( ArtifactResolverException e )
{
throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e );
}
@@ -452,12 +427,14 @@ public class DefaultRepositoryAssembler
return centralRepository;
}
- private void assembleRepositoryMetadata( ArtifactResolutionResult result, ArtifactFilter filter,
+ private void assembleRepositoryMetadata( Iterable<ArtifactResult> result, ArtifactFilter filter,
ArtifactRepository centralRepository, ArtifactRepository targetRepository )
throws RepositoryAssemblyException
{
- for ( Artifact a : result.getArtifacts() )
+ for ( ArtifactResult ar : result )
{
+ Artifact a = ar.getArtifact();
+
if ( filter.include( a ) )
{
Versioning v = new Versioning();
@@ -628,99 +605,4 @@ public class DefaultRepositoryAssembler
}
}
}
-
- // TODO: Remove this, once we can depend on Maven 2.0.7 or later...in which
- // MavenProject.getManagedVersionMap() exists. This is from MNG-1577.
- private Map<String, Artifact> getManagedVersionMap( MavenProject project )
- throws InvalidVersionSpecificationException
- {
- DependencyManagement dependencyManagement = project.getModel().getDependencyManagement();
-
- Map<String, Artifact> map;
- List<Dependency> deps = ( dependencyManagement == null ) ? null : dependencyManagement.getDependencies();
- if ( ( deps != null ) && ( deps.size() > 0 ) )
- {
- map = new HashMap<String, Artifact>();
-
- if ( getLogger().isDebugEnabled() )
- {
- getLogger().debug( "Adding managed dependencies for " + project.getId() );
- }
-
- for ( Dependency d : dependencyManagement.getDependencies() )
- {
- VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
- Artifact artifact =
- artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange,
- d.getType(), d.getClassifier(), d.getScope(),
- d.isOptional() );
- if ( getLogger().isDebugEnabled() )
- {
- getLogger().debug( " " + artifact );
- }
-
- // If the dependencyManagement section listed exclusions,
- // add them to the managed artifacts here so that transitive
- // dependencies will be excluded if necessary.
- if ( ( null != d.getExclusions() ) && !d.getExclusions().isEmpty() )
- {
- List<String> exclusions = new ArrayList<String>();
- for ( Exclusion e : d.getExclusions() )
- {
- exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
- }
- ExcludesArtifactFilter eaf = new ExcludesArtifactFilter( exclusions );
- artifact.setDependencyFilter( eaf );
- }
- else
- {
- artifact.setDependencyFilter( null );
- }
- map.put( d.getManagementKey(), artifact );
- }
- }
- else
- {
- map = Collections.emptyMap();
- }
- return map;
- }
-
- public void contextualize( Context context )
- throws ContextException
- {
- PlexusContainer container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-
- for ( String hint : PREFERRED_RESOLVER_HINTS )
- {
- try
- {
- artifactResolver = container.lookup( ArtifactResolver.class, hint );
- break;
- }
- catch ( ComponentLookupException e )
- {
- getLogger().debug( "No ArtifactResolver with hint " + hint );
- }
- }
-
- if ( artifactResolver == null )
- {
- try
- {
- artifactResolver = container.lookup( ArtifactResolver.class );
- }
- catch ( ComponentLookupException e )
- {
- getLogger().debug( "Cannot find ArtifactResolver with no hint.", e );
- }
- }
-
- if ( artifactResolver == null )
- {
- throw new ContextException(
- "Failed to lookup a valid ArtifactResolver implementation. Tried hints:\n" + Arrays.asList(
- PREFERRED_RESOLVER_HINTS ) );
- }
- }
}
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/RepositoryBuilderConfigSource.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/RepositoryBuilderConfigSource.java?rev=1722568&r1=1722567&r2=1722568&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/RepositoryBuilderConfigSource.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugins/assembly/repository/RepositoryBuilderConfigSource.java Fri Jan 1 20:28:15 2016
@@ -21,6 +21,7 @@ package org.apache.maven.plugins.assembl
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
/**
*
@@ -31,5 +32,7 @@ public interface RepositoryBuilderConfig
MavenProject getProject();
ArtifactRepository getLocalRepository();
+
+ ProjectBuildingRequest getProjectBuildingRequest();
}