maven-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bri...@apache.org
Subject svn commit: r694477 - in /maven/plugins/trunk/maven-dependency-plugin/src: main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java
Date Thu, 11 Sep 2008 20:59:12 GMT
Author: brianf
Date: Thu Sep 11 13:59:11 2008
New Revision: 694477

URL: http://svn.apache.org/viewvc?rev=694477&view=rev
Log:
MDEP-181 use installer to produce the repository layout. Patch from Igor Fedorenko 

Modified:
    maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java
    maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java

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=694477&r1=694476&r2=694477&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
Thu Sep 11 13:59:11 2008
@@ -20,10 +20,16 @@
  */
 
 import java.io.File;
+import java.net.MalformedURLException;
 import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.installer.ArtifactInstallationException;
+import org.apache.maven.artifact.installer.ArtifactInstaller;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.dependency.utils.DependencyStatusSets;
 import org.apache.maven.plugin.dependency.utils.DependencyUtil;
@@ -47,6 +53,20 @@
 {
 
     /**
+     * @parameter expression="${component.org.apache.maven.artifact.installer.ArtifactInstaller}"
+     * @required
+     * @readonly
+     */
+    protected ArtifactInstaller installer;
+
+    /**
+     * @parameter expression="${component.org.apache.maven.artifact.repository.ArtifactRepositoryFactory}"
+     * @required
+     * @readonly
+     */
+    protected ArtifactRepositoryFactory repositoryFactory;
+
+    /**
      * Main entry into mojo. Gets the list of dependencies and iterates through
      * calling copyArtifact.
      * 
@@ -62,9 +82,30 @@
         DependencyStatusSets dss = getDependencySets( this.failOnMissingClassifierArtifact
);
         Set artifacts = dss.getResolvedDependencies();
 
-        for ( Iterator i = artifacts.iterator(); i.hasNext(); )
-        {
-            copyArtifact( (Artifact) i.next(), this.stripVersion );
+    	if ( !useRepositoryLayout )
+    	{
+	        for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+	        {
+	    		copyArtifact( (Artifact) i.next(), this.stripVersion );
+	    	}
+    	}
+    	else
+    	{
+			try {
+				ArtifactRepository targetRepository = repositoryFactory.createDeploymentArtifactRepository(
+						"local", 
+						outputDirectory.toURL().toExternalForm(), 
+						new DefaultRepositoryLayout(),
+						false /*uniqueVersion*/ );
+		        for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+		        {
+					installArtifact( (Artifact) i.next(), targetRepository );
+	        	}
+			} 
+			catch ( MalformedURLException e ) 
+			{
+				throw new MojoExecutionException("Could not create outputDirectory repository", e);
+			}
         }
 
         artifacts = dss.getSkippedDependencies();
@@ -75,7 +116,48 @@
         }
     }
 
-    /**
+    private void installArtifact( Artifact artifact, ArtifactRepository targetRepository)

+    {
+		try
+		{
+			if ( "pom".equals( artifact.getType() ) ) 
+			{
+				installer.install( artifact.getFile(), artifact, targetRepository );
+			}
+			else
+			{
+	            installer.install( artifact.getFile(), artifact, targetRepository );
+	            installBaseSnapshot( artifact, targetRepository );
+
+	            if ( isCopyPom() )
+	            {
+		            Artifact pomArtifact = getResolvedPomArtifact( artifact );
+		            if ( pomArtifact.getFile() != null && pomArtifact.getFile().exists()
)
+		            {
+		            	installer.install( pomArtifact.getFile(), pomArtifact, targetRepository );
+			            installBaseSnapshot( pomArtifact, targetRepository );
+		            }
+	            }
+			}
+		}
+		catch ( ArtifactInstallationException e ) 
+		{
+		    getLog().info( e.getMessage() );
+		}
+	}
+
+	private void installBaseSnapshot( Artifact artifact, ArtifactRepository targetRepository
)
+			throws ArtifactInstallationException 
+	{
+		if ( artifact.isSnapshot() && !artifact.getBaseVersion().equals( artifact.getVersion()
) )
+		{
+			Artifact baseArtifact = this.factory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+		            artifact.getBaseVersion(), artifact.getScope(), artifact.getType() );
+		    installer.install( artifact.getFile(), baseArtifact, targetRepository );
+		}
+	}
+
+	/**
      * Copies the Artifact after building the destination file name if
      * overridden. This method also checks if the classifier is set and adds it
      * to the destination file name if needed.
@@ -109,17 +191,8 @@
         if ( isCopyPom() )
         {
             // Create the pom
-            Artifact pomArtifact = this.factory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(),
-                                                                artifact.getVersion(), "",
"pom" );
-            // Resolve the pom artifact using repos
-            try
-            {
-                this.resolver.resolve( pomArtifact, this.remoteRepos, this.local );
-            }
-            catch ( Exception e )
-            {
-                getLog().info( e.getMessage() );
-            }
+            Artifact pomArtifact = getResolvedPomArtifact( artifact );
+            
             // Copy the pom
             if ( pomArtifact.getFile() != null && pomArtifact.getFile().exists()
)
             {
@@ -129,6 +202,21 @@
         }
     }
 
+	protected Artifact getResolvedPomArtifact( Artifact artifact ) {
+		Artifact pomArtifact = this.factory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+		                                                    artifact.getVersion(), "", "pom" );
+		// Resolve the pom artifact using repos
+		try
+		{
+		    this.resolver.resolve( pomArtifact, this.remoteRepos, this.local );
+		}
+		catch ( Exception e )
+		{
+		    getLog().info( e.getMessage() );
+		}
+		return pomArtifact;
+	}
+
     protected ArtifactsFilter getMarkedArtifactFilter()
     {
         return new DestFileFilter( this.overWriteReleases, this.overWriteSnapshots, this.overWriteIfNewer,

Modified: maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java?rev=694477&r1=694476&r2=694477&view=diff
==============================================================================
--- maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java
(original)
+++ maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo2.java
Thu Sep 11 13:59:11 2008
@@ -25,11 +25,19 @@
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.artifact.transform.SnapshotTransformation;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.dependency.utils.DependencyUtil;
 import org.apache.maven.plugin.dependency.utils.markers.DefaultFileMarkerHandler;
 import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
 
 public class TestCopyDependenciesMojo2
     extends AbstractDependencyMojoTestCase
@@ -217,21 +225,65 @@
     public void testRepositoryLayout()
         throws Exception
     {
+    	String baseVersion = "2.0-SNAPSHOT";
+		Artifact expandedSnapshot = this.stubFactory.createArtifact( "testGroupId", "expanded-snapshot",
baseVersion );
+
+    	SnapshotTransformation tr = new SnapshotTransformation();
+        Snapshot snapshot = new Snapshot();
+        snapshot.setTimestamp( tr.getDeploymentTimestamp() );
+        snapshot.setBuildNumber( 1 );
+        RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( expandedSnapshot,
snapshot );
+        String newVersion = snapshot.getTimestamp() + "-" + snapshot.getBuildNumber();
+        expandedSnapshot.setResolvedVersion( StringUtils.replace( baseVersion, Artifact.SNAPSHOT_VERSION,
newVersion ) );
+        expandedSnapshot.addMetadata( metadata );
+
+    	mojo.project.getArtifacts().add(expandedSnapshot);
+    	mojo.project.getDependencyArtifacts().add(expandedSnapshot);
+
         mojo.useRepositoryLayout = true;
         mojo.execute();
+        
+        File outputDirectory = mojo.outputDirectory;
+		ArtifactRepository targetRepository = mojo.repositoryFactory.createDeploymentArtifactRepository(

+        		"local", 
+        		outputDirectory.toURL().toExternalForm(), 
+                new DefaultRepositoryLayout(),
+                false );
 
         Iterator iter = mojo.project.getArtifacts().iterator();
         while ( iter.hasNext() )
         {
             Artifact artifact = (Artifact) iter.next();
-            String fileName = DependencyUtil.getFormattedFileName( artifact, false );
-            File folder = DependencyUtil.getFormattedOutputDirectory( false, true, mojo.useRepositoryLayout,
false,
-                                                                      mojo.outputDirectory,
artifact );
-            File file = new File( folder, fileName );
-            assertTrue( file.exists() );
+			assertArtifactExists( artifact, targetRepository );
+            
+            if ( ! artifact.getBaseVersion().equals( artifact.getVersion() ) )
+            {
+            	Artifact baseArtifact = mojo.factory.createArtifact( artifact.getGroupId(),

+						            			                     artifact.getArtifactId(),
+						            			                     artifact.getBaseVersion(),
+						            			                     artifact.getScope(),
+						            			                     artifact.getType() );
+    			assertArtifactExists( baseArtifact, targetRepository );
+            }
+
         }
     }
 
+	private void assertArtifactExists( Artifact artifact, ArtifactRepository targetRepository
) {
+		File file = new File( targetRepository.getBasedir(), 
+							  targetRepository.getLayout().pathOf( artifact ) );
+		assertTrue( file.exists() );
+
+		Iterator metaIter = artifact.getMetadataList().iterator();
+        while ( metaIter.hasNext() )
+        {
+        	ArtifactMetadata meta = (ArtifactMetadata) metaIter.next();
+			File metaFile = new File( targetRepository.getBasedir(), 
+									  targetRepository.getLayout().pathOfLocalRepositoryMetadata( meta, targetRepository)
);
+			assertTrue( metaFile.exists() );
+        }
+	}
+
     public void testSubPerArtifactRemoveVersion()
         throws Exception
     {



Mime
View raw message