Author: brianf
Date: Mon Jan 22 20:15:57 2007
New Revision: 498910
URL: http://svn.apache.org/viewvc?view=rev&rev=498910
Log:
MDEP-50 - branch to workout versionspec artifact resolution
Modified:
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/it/mdep-50/pom.xml
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyMojo.java
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
Modified:
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/it/mdep-50/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/it/mdep-50/pom.xml?view=diff&rev=498910&r1=498909&r2=498910
==============================================================================
---
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/it/mdep-50/pom.xml
(original)
+++
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/it/mdep-50/pom.xml
Mon Jan 22 20:15:57 2007
@@ -5,18 +5,6 @@
<artifactId>mdep-50-it</artifactId>
<version>1</version>
<packaging>jar</packaging>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>[3.7,4.0)</version>
- </dependency>
- <dependency>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.6</version>
- </dependency>
- </dependencies>
<build>
<defaultGoal>generate-sources</defaultGoal>
<plugins>
@@ -37,6 +25,11 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.7,4.0)</version>
+ </artifactItem>
+ <artifactItem>
+
<groupId>ant</groupId>
+
<artifactId>ant</artifactId>
+
<version>[1.1,1.5)</version>
</artifactItem>
</artifactItems>
</configuration>
Modified:
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyMojo.java?view=diff&rev=498910&r1=498909&r2=498910
==============================================================================
---
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyMojo.java
(original)
+++
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyMojo.java
Mon Jan 22 20:15:57 2007
@@ -24,6 +24,8 @@
import java.lang.reflect.Field;
import java.util.List;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.dependency.utils.SilentLog;
@@ -61,6 +63,22 @@
*/
protected org.apache.maven.artifact.resolver.ArtifactResolver resolver;
+ /**
+ * Artifact collector, needed to resolve dependencies.
+ *
+ * @component role="org.apache.maven.artifact.resolver.ArtifactCollector"
+ * @required
+ * @readonly
+ */
+ protected ArtifactCollector artifactCollector;
+
+ /**
+ * @component
role="org.apache.maven.artifact.metadata.ArtifactMetadataSource" hint="maven"
+ * @required
+ * @readonly
+ */
+ protected ArtifactMetadataSource artifactMetadataSource;
+
/**
* Location of the local repository.
*
Modified:
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/fromConfiguration/AbstractFromConfigurationMojo.java?view=diff&rev=498910&r1=498909&r2=498910
==============================================================================
---
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
(original)
+++
maven/plugins/branches/maven-dependency-plugin-MDEP-50/src/main/java/org/apache/maven/plugin/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
Mon Jan 22 20:15:57 2007
@@ -21,13 +21,30 @@
import java.io.File;
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;
+import java.util.TreeSet;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
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.DebugResolutionListener;
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.artifact.resolver.WarningResolutionListener;
+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.MojoExecutionException;
import org.apache.maven.plugin.dependency.AbstractDependencyMojo;
import org.apache.maven.plugin.dependency.utils.DependencyUtil;
@@ -170,6 +187,75 @@
}
/**
+ * Returns the list of project artifacts. Also artifacts generated from
+ * referenced projects will be added, but with the <code>resolved</code>
+ * property set to true.
+ *
+ * @return list of projects artifacts
+ * @throws MojoExecutionException
+ * if unable to parse dependency versions
+ */
+ private Set getProjectArtifacts()
+ throws MojoExecutionException
+ {
+ // keep it sorted, this should avoid random classpath order in tests
+ Set artifacts = new TreeSet();
+
+ for ( Iterator dependencies =
getProject().getDependencies().iterator(); dependencies.hasNext(); )
+ {
+ Dependency dependency = (Dependency) dependencies.next();
+
+ String groupId = dependency.getGroupId();
+ String artifactId = dependency.getArtifactId();
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec(
dependency.getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new MojoExecutionException( "unable to parse version", e
);
+ }
+
+ String type = dependency.getType();
+ if ( type == null )
+ {
+ type = "jar"; //$NON-NLS-1$
+ }
+ String classifier = dependency.getClassifier();
+ boolean optional = dependency.isOptional();
+ String scope = dependency.getScope();
+ if ( scope == null )
+ {
+ scope = Artifact.SCOPE_COMPILE;
+ }
+
+ Artifact art = factory.createDependencyArtifact( groupId,
artifactId, versionRange, type, classifier,
+ scope, optional );
+
+ if ( scope.equalsIgnoreCase( Artifact.SCOPE_SYSTEM ) )
+ {
+ art.setFile( new File( dependency.getSystemPath() ) );
+ }
+
+ List exclusions = new ArrayList();
+ for ( Iterator j = dependency.getExclusions().iterator();
j.hasNext(); )
+ {
+ Exclusion e = (Exclusion) j.next();
+ exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
//$NON-NLS-1$
+ }
+
+ ArtifactFilter newFilter = new ExcludesArtifactFilter( exclusions
);
+
+ art.setDependencyFilter( newFilter );
+
+ artifacts.add( art );
+ }
+
+ return artifacts;
+ }
+
+ /**
* Resolves the Artifact from the remote repository if nessessary. If no
* version is specified, it will be retrieved from the dependency list or
* from the DependencyManagement section of the pom.
@@ -188,21 +274,48 @@
{
Artifact artifact;
+ Map managedVersions = createManagedVersionMap( factory,
project.getId(), project.getDependencyManagement() );
+ VersionRange vr;
+ try
+ {
+ vr = VersionRange.createFromVersionSpec( artifactItem.getVersion()
);
+ }
+ catch ( InvalidVersionSpecificationException e1 )
+ {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ vr = VersionRange.createFromVersion( artifactItem.getVersion() );
+ }
+
if ( StringUtils.isEmpty( artifactItem.getClassifier() ) )
{
- artifact = factory.createArtifact( artifactItem.getGroupId(),
artifactItem.getArtifactId(), artifactItem
- .getVersion(), Artifact.SCOPE_PROVIDED, artifactItem.getType()
);
+ artifact = factory.createDependencyArtifact(
artifactItem.getGroupId(), artifactItem.getArtifactId(), vr,
+
artifactItem.getType(), null, Artifact.SCOPE_COMPILE );
}
else
{
- artifact = factory.createArtifactWithClassifier(
artifactItem.getGroupId(), artifactItem.getArtifactId(),
-
artifactItem.getVersion(), artifactItem.getType(),
-
artifactItem.getClassifier() );
+ artifact = factory.createDependencyArtifact(
artifactItem.getGroupId(), artifactItem.getArtifactId(), vr,
+
artifactItem.getType(), artifactItem.getClassifier(), Artifact.SCOPE_COMPILE );
}
try
{
- resolver.resolve( artifact, remoteRepos, local );
+ List listeners = new ArrayList();
+
+ Set theSet = new HashSet();
+ theSet.add( artifact );
+ ArtifactResolutionResult artifactResolutionResult =
artifactCollector.collect( theSet, project
+ .getArtifact(), managedVersions, this.local,
project.getRemoteArtifactRepositories(),
+
artifactMetadataSource,
+
null, listeners );
+ Iterator iter =
artifactResolutionResult.getArtifactResolutionNodes().iterator();
+ while ( iter.hasNext() )
+ {
+ ResolutionNode node = (ResolutionNode) iter.next();
+ artifact = node.getArtifact();
+ }
+
+ resolver.resolve( artifact, remoteRepos, local );
}
catch ( ArtifactResolutionException e )
{
@@ -266,6 +379,40 @@
return result;
}
+ private Map createManagedVersionMap( ArtifactFactory artifactFactory,
String projectId,
+ DependencyManagement
dependencyManagement )
+ throws MojoExecutionException
+ {
+ Map map;
+ if ( dependencyManagement != null &&
dependencyManagement.getDependencies() != null )
+ {
+ map = new HashMap();
+ for ( Iterator i =
dependencyManagement.getDependencies().iterator(); i.hasNext(); )
+ {
+ Dependency d = (Dependency) i.next();
+
+ try
+ {
+ VersionRange versionRange =
VersionRange.createFromVersionSpec( d.getVersion() );
+ Artifact artifact =
artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
+
versionRange, d.getType(), d
+
.getClassifier(), d.getScope(), d
+
.isOptional() );
+ map.put( d.getManagementKey(), artifact );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new MojoExecutionException( "Unable to parse
version", e );
+ }
+ }
+ }
+ else
+ {
+ map = Collections.EMPTY_MAP;
+ }
+ return map;
+ }
+
/**
* @return Returns the artifactItems.
*/
@@ -275,7 +422,8 @@
}
/**
- * @param theArtifactItems The artifactItems to set.
+ * @param theArtifactItems
+ * The artifactItems to set.
*/
public void setArtifactItems( ArrayList theArtifactItems )
{
@@ -291,7 +439,8 @@
}
/**
- * @param theOutputDirectory The outputDirectory to set.
+ * @param theOutputDirectory
+ * The outputDirectory to set.
*/
public void setOutputDirectory( File theOutputDirectory )
{
@@ -307,7 +456,8 @@
}
/**
- * @param theOverWriteIfNewer The overWriteIfNewer to set.
+ * @param theOverWriteIfNewer
+ * The overWriteIfNewer to set.
*/
public void setOverWriteIfNewer( boolean theOverWriteIfNewer )
{
@@ -323,7 +473,8 @@
}
/**
- * @param theOverWriteReleases The overWriteReleases to set.
+ * @param theOverWriteReleases
+ * The overWriteReleases to set.
*/
public void setOverWriteReleases( boolean theOverWriteReleases )
{
@@ -339,7 +490,8 @@
}
/**
- * @param theOverWriteSnapshots The overWriteSnapshots to set.
+ * @param theOverWriteSnapshots
+ * The overWriteSnapshots to set.
*/
public void setOverWriteSnapshots( boolean theOverWriteSnapshots )
{