You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/07/20 00:19:47 UTC
svn commit: r557792 -
/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java
Author: jdcasey
Date: Thu Jul 19 15:19:40 2007
New Revision: 557792
URL: http://svn.apache.org/viewvc?view=rev&rev=557792
Log:
Fixing artifact resolution to be MNG-1577 compatible (using the dependency management for the resolve call).
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java?view=diff&rev=557792&r1=557791&r2=557792
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java Thu Jul 19 15:19:40 2007
@@ -9,6 +9,12 @@
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Exclusion;
import org.apache.maven.plugin.assembly.utils.FilterUtils;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@@ -19,14 +25,16 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
* @plexus.component role="org.apache.maven.plugin.assembly.artifact.DependencyResolver" role-hint="default"
- *
+ *
* @author jdcasey
*/
public class DefaultDependencyResolver
@@ -82,11 +90,18 @@
Set dependencyArtifacts =
MavenMetadataSource.createArtifacts( factory, project.getDependencies(), null, filter, project );
- ArtifactResolutionResult result =
- resolver.resolveTransitively( dependencyArtifacts, artifact, localRepository, repos, metadataSource, filter );
-
+ ArtifactResolutionResult result;
+ try
+ {
+ result = resolver.resolveTransitively( dependencyArtifacts, artifact, getManagedVersionMap( project ), localRepository, repos, metadataSource, filter );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new InvalidDependencyVersionException( e.getMessage(), e );
+ }
+
getLogger().debug( "While resolving dependencies of " + project.getId() + ":" );
-
+
FilterUtils.reportFilteringStatistics( Collections.singleton( filter ), getLogger() );
return result.getArtifacts();
@@ -95,23 +110,23 @@
private List aggregateRemoteArtifactRepositories( List remoteRepositories, MavenProject project )
{
List repoLists = new ArrayList();
-
+
repoLists.add( remoteRepositories );
repoLists.add( project.getRemoteArtifactRepositories() );
-
+
List remoteRepos = new ArrayList();
Set encounteredUrls = new HashSet();
for ( Iterator listIterator = repoLists.iterator(); listIterator.hasNext(); )
{
List repositoryList = ( List ) listIterator.next();
-
- if ( repositoryList != null && !repositoryList.isEmpty() )
+
+ if ( ( repositoryList != null ) && !repositoryList.isEmpty() )
{
for ( Iterator it = repositoryList.iterator(); it.hasNext(); )
{
ArtifactRepository repo = ( ArtifactRepository ) it.next();
-
+
if ( !encounteredUrls.contains( repo.getUrl() ) )
{
remoteRepos.add( repo );
@@ -124,4 +139,65 @@
return remoteRepos;
}
+ // 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 getManagedVersionMap( MavenProject project )
+ throws InvalidVersionSpecificationException
+ {
+ DependencyManagement dependencyManagement = project.getModel().getDependencyManagement();
+
+ Map map = null;
+ List deps;
+ if ( ( dependencyManagement != null ) && ( ( deps = dependencyManagement.getDependencies() ) != null )
+ && ( deps.size() > 0 ) )
+ {
+ map = new HashMap();
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Adding managed dependencies for " + project.getId() );
+ }
+
+ for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); )
+ {
+ Dependency d = (Dependency) i.next();
+
+ VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
+ Artifact artifact = factory.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 exclusions = new ArrayList();
+ Iterator exclItr = d.getExclusions().iterator();
+ while ( exclItr.hasNext() )
+ {
+ Exclusion e = (Exclusion) exclItr.next();
+ exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
+ }
+ ExcludesArtifactFilter eaf = new ExcludesArtifactFilter( exclusions );
+ artifact.setDependencyFilter( eaf );
+ }
+ else
+ {
+ artifact.setDependencyFilter( null );
+ }
+ map.put( d.getManagementKey(), artifact );
+ }
+ }
+ else if ( map == null )
+ {
+ map = Collections.EMPTY_MAP;
+ }
+ return map;
+ }
}