Author: rfscholte Date: Tue Oct 16 19:19:00 2012 New Revision: 1398935 URL: http://svn.apache.org/viewvc?rev=1398935&view=rev Log: [MDEP-380] copy-dependencies should be able to use the artifact's baseVersion contributed by Bakito reviewed and submitted with minimum adjustments by Robert Scholte
Modified: maven/plugins/trunk/maven-dependency-plugin/pom.xml maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/utils/TestDependencyUtil.java Modified: maven/plugins/trunk/maven-dependency-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/pom.xml?rev=1398935&r1=1398934&r2=1398935&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-dependency-plugin/pom.xml Tue Oct 16 19:19:00 2012 @@ -50,6 +50,12 @@ under the License. <url>http://jira.codehaus.org/browse/MDEP</url> </issueManagement> + <contributors> + <contributor> + <name>Bakito</name> + </contributor> + </contributors> + <properties> <mavenVersion>2.0.9</mavenVersion> <doxiaVersion>1.0</doxiaVersion> Modified: maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java?rev=1398935&r1=1398934&r2=1398935&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java Tue Oct 16 19:19:00 2012 @@ -32,6 +32,7 @@ import org.apache.maven.plugin.dependenc import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; @@ -72,6 +73,14 @@ public class CopyDependenciesMojo @Component( role = ArtifactRepositoryLayout.class ) private Map<String, ArtifactRepositoryLayout> repositoryLayouts; + + /** + * Either append the artifact's baseVersion or uniqueVersion to the filename. + * Will only be used if {@link #isStripVersion()} is {@code false}. + */ + @Parameter( property = "mdep.useBaseVersion", defaultValue = "true" ) + protected boolean useBaseVersion = false; + /** * Main entry into mojo. Gets the list of dependencies and iterates through * calling copyArtifact. @@ -90,7 +99,7 @@ public class CopyDependenciesMojo { for ( Artifact artifact : artifacts ) { - copyArtifact( artifact, this.stripVersion, this.prependGroupId ); + copyArtifact( artifact, isStripVersion(), this.prependGroupId, this.useBaseVersion ); } } else @@ -179,15 +188,17 @@ public class CopyDependenciesMojo * @param removeVersion specifies if the version should be removed from the file name * when copying. * @param prependGroupId specifies if the groupId should be prepend to the file while copying. + * @param useBaseVersion specifies if the baseVersion of the artifact should be used instead of the version. * @throws MojoExecutionException with a message if an error occurs. * @see DependencyUtil#copyFile(File, File, Log) * @see DependencyUtil#getFormattedFileName(Artifact, boolean) */ - protected void copyArtifact( Artifact artifact, boolean removeVersion, boolean prependGroupId ) - throws MojoExecutionException + protected void copyArtifact( Artifact artifact, boolean removeVersion, boolean prependGroupId, + boolean useBaseVersion ) throws MojoExecutionException { - String destFileName = DependencyUtil.getFormattedFileName( artifact, removeVersion, prependGroupId ); + String destFileName = DependencyUtil.getFormattedFileName( artifact, removeVersion, prependGroupId, + useBaseVersion ); File destDir; destDir = DependencyUtil.getFormattedOutputDirectory( useSubDirectoryPerScope, useSubDirectoryPerType, Modified: maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java?rev=1398935&r1=1398934&r2=1398935&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java Tue Oct 16 19:19:00 2012 @@ -52,7 +52,7 @@ public final class DependencyUtil { return getFormattedFileName( artifact, removeVersion, false ); } - + /** * Builds the file name. If removeVersion is set, then the file name must be * reconstructed from the groupId (if <b>prependGroupId</b> is true) artifactId, @@ -69,6 +69,30 @@ public final class DependencyUtil * [groupId].artifactId-[version]-[classifier].[type] */ public static String getFormattedFileName( Artifact artifact, boolean removeVersion, boolean prependGroupId ) + { + return getFormattedFileName(artifact, removeVersion, prependGroupId, false); + + } + + /** + * Builds the file name. If removeVersion is set, then the file name must be + * reconstructed from the groupId (if <b>prependGroupId</b> is true) artifactId, + * Classifier (if used) and Type. + * Otherwise, this method returns the artifact file name. + * + * @param artifact + * File to be formatted. + * @param removeVersion + * Specifies if the version should be removed from the file name. + * @param prependGroupId + * Specifies if the groupId should be prepended to the file name. + * @param useBaseVersion + * Specifies if the baseVersion of the artifact should be used instead of the version. + * @return Formatted file name in the format + * [groupId].artifactId-[version]-[classifier].[type] + */ + public static String getFormattedFileName( Artifact artifact, boolean removeVersion, boolean prependGroupId, + boolean useBaseVersion ) { StringBuilder destFileName = new StringBuilder(); @@ -80,7 +104,14 @@ public final class DependencyUtil String versionString = null; if ( !removeVersion ) { - versionString = "-" + artifact.getVersion(); + if ( useBaseVersion ) + { + versionString = "-" + artifact.getBaseVersion(); + } + else + { + versionString = "-" + artifact.getVersion(); + } } else { Modified: maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java?rev=1398935&r1=1398934&r2=1398935&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java Tue Oct 16 19:19:00 2012 @@ -22,7 +22,6 @@ package org.apache.maven.plugin.dependen import java.io.File; import java.io.IOException; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -103,10 +102,9 @@ public class TestCopyDependenciesMojo throws Exception { mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertTrue( file.exists() ); @@ -122,26 +120,39 @@ public class TestCopyDependenciesMojo mojo.stripVersion = true; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, true ); File file = new File( mojo.outputDirectory, fileName ); assertTrue( file.exists() ); } } + public void testUseBaseVersion() + throws Exception + { + mojo.useBaseVersion = true; + mojo.execute(); + + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) + { + String fileName = DependencyUtil.getFormattedFileName( artifact, false, false, true ); + File file = new File( mojo.outputDirectory, fileName ); + assertTrue( file.exists() ); + } + } + public void testNoTransitive() throws Exception { mojo.excludeTransitive = true; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getDependencyArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getDependencyArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertTrue( file.exists() ); @@ -156,10 +167,9 @@ public class TestCopyDependenciesMojo mojo.excludeTypes = "jar"; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getType().equalsIgnoreCase( "jar" ), !file.exists() ); @@ -178,10 +188,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertFalse( file.exists() ); @@ -190,10 +199,9 @@ public class TestCopyDependenciesMojo mojo.excludeTypes = ""; mojo.execute(); - iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getType().equalsIgnoreCase( "jar" ), file.exists() ); @@ -209,10 +217,9 @@ public class TestCopyDependenciesMojo mojo.excludeArtifactIds = "one"; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getArtifactId().equals( "one" ), !file.exists() ); @@ -231,10 +238,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertFalse( file.exists() ); @@ -243,10 +249,9 @@ public class TestCopyDependenciesMojo mojo.excludeArtifactIds = ""; mojo.execute(); - iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getArtifactId().equals( "one" ), file.exists() ); @@ -264,10 +269,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertFalse( file.exists() ); @@ -276,10 +280,9 @@ public class TestCopyDependenciesMojo mojo.excludeGroupIds = ""; mojo.execute(); - iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getGroupId().equals( "one" ), file.exists() ); @@ -295,10 +298,9 @@ public class TestCopyDependenciesMojo mojo.excludeGroupIds = "one"; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); @@ -313,10 +315,9 @@ public class TestCopyDependenciesMojo mojo.excludeGroupIds = "one,two"; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); @@ -332,10 +333,9 @@ public class TestCopyDependenciesMojo mojo.excludeClassifiers = "one"; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getClassifier().equals( "one" ), !file.exists() ); @@ -354,10 +354,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertFalse( file.exists() ); @@ -366,10 +365,9 @@ public class TestCopyDependenciesMojo mojo.excludeClassifiers = ""; mojo.execute(); - iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getClassifier().equals( "one" ), file.exists() ); @@ -385,10 +383,9 @@ public class TestCopyDependenciesMojo mojo.useSubDirectoryPerType = true; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File folder = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, false, mojo.outputDirectory, artifact ); @@ -428,11 +425,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); - String useClassifier = artifact.getClassifier(); String useType = artifact.getType(); @@ -650,10 +645,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getScope().equals( "provided" ), !file.exists() ); @@ -673,10 +667,9 @@ public class TestCopyDependenciesMojo mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); assertEquals( artifact.getScope().equals( "system" ), !file.exists() ); @@ -695,10 +688,9 @@ public class TestCopyDependenciesMojo mojo.execute(); ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.excludeScope ); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); @@ -734,10 +726,9 @@ public class TestCopyDependenciesMojo mojo.execute(); ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.excludeScope ); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName ); @@ -757,10 +748,9 @@ public class TestCopyDependenciesMojo mojo.project.setArtifacts( set ); mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false ); File file = new File( mojo.outputDirectory, fileName.substring( 0, fileName.length() - 4 ) + ".pom" ); assertTrue( file.exists() ); @@ -773,10 +763,9 @@ public class TestCopyDependenciesMojo mojo.prependGroupId = true; mojo.execute(); - Iterator<Artifact> iter = mojo.project.getArtifacts().iterator(); - while ( iter.hasNext() ) + Set<Artifact> artifacts = mojo.project.getArtifacts(); + for ( Artifact artifact : artifacts ) { - Artifact artifact = iter.next(); String fileName = DependencyUtil.getFormattedFileName( artifact, false, true ); File file = new File( mojo.outputDirectory, fileName ); assertTrue( file.exists() ); Modified: maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/utils/TestDependencyUtil.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/utils/TestDependencyUtil.java?rev=1398935&r1=1398934&r2=1398935&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/utils/TestDependencyUtil.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/utils/TestDependencyUtil.java Tue Oct 16 19:19:00 2012 @@ -51,6 +51,8 @@ public class TestDependencyUtil Artifact snap; + Artifact snapResolvedVersion; + Artifact release; Artifact sources; @@ -72,6 +74,12 @@ public class TestDependencyUtil ah = new DefaultArtifactHandlerStub( "war", null ); vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" ); + snapResolvedVersion = new DefaultArtifact( "test", "three", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false ); + snapResolvedVersion.setResolvedVersion("1.1-20121003.035531-117"); + artifacts.add( snapResolvedVersion ); + + ah = new DefaultArtifactHandlerStub( "war", null ); + vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" ); sources = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false ); // pick random output location @@ -195,6 +203,19 @@ public class TestDependencyUtil assertEquals( expectedResult, name ); } + public void testFileNameUseBaseVersion() + throws MojoExecutionException + { + Artifact artifact = snapResolvedVersion; + + String name = DependencyUtil.getFormattedFileName( artifact, false, false, true ); + String expectedResult = "three-1.1-SNAPSHOT.war"; + assertEquals( expectedResult, name ); + name = DependencyUtil.getFormattedFileName( artifact, false, false, false ); + expectedResult = "three-1.1-20121003.035531-117.war"; + assertEquals( expectedResult, name ); + } + public void testTestJar() { ArtifactHandler ah = new DefaultArtifactHandlerStub( "test-jar", null );