add quick support for exclusions

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@188779 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-06-07 14:22:38 +00:00
parent 77caea316a
commit d6d65fc75a
5 changed files with 91 additions and 20 deletions

View File

@ -19,6 +19,7 @@ package org.apache.maven.artifact;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import java.io.File;
import java.util.List;
@ -93,4 +94,8 @@ public interface Artifact
String getDownloadUrl();
void setDownloadUrl( String downloadUrl );
ArtifactFilter getDependencyFilter();
void setDependencyFilter( ArtifactFilter artifactFilter );
}

View File

@ -20,6 +20,7 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
@ -58,6 +59,8 @@ public class DefaultArtifact
private String downloadUrl;
private ArtifactFilter dependencyFilter;
/**
* !!! WARNING !!! Never put <classifier/> in the POM. It is for mojo use
* only. Classifier is for specifying derived artifacts, like ejb-client.
@ -350,4 +353,14 @@ public class DefaultArtifact
{
this.downloadUrl = downloadUrl;
}
public ArtifactFilter getDependencyFilter()
{
return dependencyFilter;
}
public void setDependencyFilter( ArtifactFilter artifactFilter )
{
this.dependencyFilter = artifactFilter;
}
}

View File

@ -17,6 +17,9 @@
|
| o use enums where appropriate (eg dependency scope)
|
| o a number of elements have a grouId/artifactId and sometimes version. It would be good to have them all extend one
| definition of these types
|
-->
<model>
<id>maven</id>
@ -1210,6 +1213,18 @@
<type>String</type>
<defaultValue>compile</defaultValue>
</field>
<field>
<name>exclusions</name>
<version>4.0.0</version>
<description>
Lists a set of artifacts that should be excluded from this dependency's artifact list when it comes to
calculating transitive dependencies.
</description>
<association>
<type>Exclusion</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
@ -1322,6 +1337,24 @@
</field>
</fields>
</class>
<class>
<name>Exclusion</name>
<version>4.0.0</version>
<fields>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<description><![CDATA[The artifact id of the project to exclude.]]></description>
<type>String</type>
</field>
<field>
<name>groupId</name>
<version>4.0.0</version>
<description><![CDATA[The group id of the project to exclude.]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>IssueManagement</name>
<description>

View File

@ -41,6 +41,7 @@ import org.apache.maven.project.interpolation.ModelInterpolator;
import org.apache.maven.project.path.PathTranslator;
import org.apache.maven.project.validation.ModelValidationResult;
import org.apache.maven.project.validation.ModelValidator;
import org.apache.maven.project.artifact.MavenMetadataSource;
import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@ -478,21 +479,8 @@ public class DefaultMavenProjectBuilder
protected Set createArtifacts( List dependencies )
{
Set projectArtifacts = new HashSet();
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency d = (Dependency) i.next();
Artifact artifact = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(),
d.getScope(), d.getType(), null );
if ( artifact != null )
{
projectArtifacts.add( artifact );
}
}
return projectArtifacts;
// TODO: merge with MavenMetadataSource properly
return new MavenMetadataSource( artifactResolver, this ).createArtifacts( dependencies, null, null );
}
protected Set createPluginArtifacts( List plugins )

View File

@ -24,7 +24,11 @@ import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
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.resolver.filter.AndArtifactFilter;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Exclusion;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.MavenProject;
@ -37,6 +41,7 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@ -78,7 +83,7 @@ public class MavenMetadataSource
{
// TODO: only metadata is really needed - resolve as metadata
Artifact pomArtifact = artifactFactory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion(), artifact.getScope(), "pom" );
artifact.getVersion(), artifact.getScope(), "pom" );
List dependencies = null;
@ -133,10 +138,10 @@ public class MavenMetadataSource
IOUtil.close( reader );
}
}
return createArtifacts( dependencies, artifact.getScope() );
return createArtifacts( dependencies, artifact.getScope(), artifact.getDependencyFilter() );
}
protected Set createArtifacts( List dependencies, String inheritedScope )
public Set createArtifacts( List dependencies, String inheritedScope, ArtifactFilter dependencyFilter )
{
Set projectArtifacts = new HashSet();
@ -146,9 +151,36 @@ public class MavenMetadataSource
Artifact artifact = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(),
d.getScope(), d.getType(), inheritedScope );
if ( artifact != null )
if ( artifact != null && ( dependencyFilter == null || dependencyFilter.include( artifact ) ) )
{
projectArtifacts.add( artifact );
if ( d.getExclusions() != null && !d.getExclusions().isEmpty() )
{
List exclusions = new ArrayList();
for ( Iterator j = d.getExclusions().iterator(); j.hasNext(); )
{
Exclusion e = (Exclusion) j.next();
exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
}
ArtifactFilter newFilter = new ExcludesArtifactFilter( exclusions );
if ( dependencyFilter != null )
{
AndArtifactFilter filter = new AndArtifactFilter();
filter.add( dependencyFilter );
filter.add( newFilter );
dependencyFilter = filter;
}
else
{
dependencyFilter = newFilter;
}
}
artifact.setDependencyFilter( dependencyFilter );
projectArtifacts.add( artifact );
}
}