Return-Path: Delivered-To: apmail-maven-commits-archive@www.apache.org Received: (qmail 90610 invoked from network); 11 Sep 2008 20:59:35 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Sep 2008 20:59:35 -0000 Received: (qmail 33785 invoked by uid 500); 11 Sep 2008 20:59:31 -0000 Delivered-To: apmail-maven-commits-archive@maven.apache.org Received: (qmail 33714 invoked by uid 500); 11 Sep 2008 20:59:31 -0000 Mailing-List: contact commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@maven.apache.org Delivered-To: mailing list commits@maven.apache.org Received: (qmail 33705 invoked by uid 99); 11 Sep 2008 20:59:31 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Sep 2008 13:59:31 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Sep 2008 20:58:41 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 36FB223889F7; Thu, 11 Sep 2008 13:59:13 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit 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 -0000 To: commits@maven.apache.org From: brianf@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080911205913.36FB223889F7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 {