You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2007/11/06 06:25:21 UTC
svn commit: r592286 -
/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
Author: jvanzyl
Date: Mon Nov 5 21:25:20 2007
New Revision: 592286
URL: http://svn.apache.org/viewvc?rev=592286&view=rev
Log:
MARTIFACT-6 Deployments of previously deployed versions will be stopped.
Modified:
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java?rev=592286&r1=592285&r2=592286&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java (original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java Mon Nov 5 21:25:20 2007
@@ -22,28 +22,40 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataDeploymentException;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
import org.apache.maven.artifact.transform.ArtifactTransformationManager;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.wagon.TransferFailedException;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Iterator;
+import java.util.List;
public class DefaultArtifactDeployer
extends AbstractLogEnabled
implements ArtifactDeployer
{
+ /** @plexus.component */
private WagonManager wagonManager;
+ /** @plexuxs.component */
private ArtifactTransformationManager transformationManager;
+ /** @plexus.component */
private RepositoryMetadataManager repositoryMetadataManager;
+ /** @plexus.component */
+ private ArtifactMetadataSource metadataSource;
+
/** @deprecated we want to use the artifact method only, and ensure artifact.file is set correctly. */
public void deploy( String basedir,
String finalName,
@@ -69,40 +81,74 @@
throw new ArtifactDeploymentException( "System is offline. Cannot deploy artifact: " + artifact + "." );
}
- try
+ if ( !artifactHasBeenDeployed( artifact, localRepository, deploymentRepository ) )
{
- transformationManager.transformForDeployment( artifact, deploymentRepository, localRepository );
+ try
+ {
+ transformationManager.transformForDeployment( artifact, deploymentRepository, localRepository );
- // Copy the original file to the new one if it was transformed
- File artifactFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );
- if ( !artifactFile.equals( source ) )
+ // Copy the original file to the new one if it was transformed
+ File artifactFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );
+ if ( !artifactFile.equals( source ) )
+ {
+ FileUtils.copyFile( source, artifactFile );
+ }
+
+ wagonManager.putArtifact( source, artifact, deploymentRepository );
+
+ // must be after the artifact is installed
+ for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
+ {
+ ArtifactMetadata metadata = (ArtifactMetadata) i.next();
+ repositoryMetadataManager.deploy( metadata, localRepository, deploymentRepository );
+ }
+ }
+ catch ( TransferFailedException e )
{
- FileUtils.copyFile( source, artifactFile );
+ throw new ArtifactDeploymentException( "Error deploying artifact: " + e.getMessage(), e );
}
-
- wagonManager.putArtifact( source, artifact, deploymentRepository );
-
- // must be after the artifact is installed
- for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
+ catch ( IOException e )
{
- ArtifactMetadata metadata = (ArtifactMetadata) i.next();
- repositoryMetadataManager.deploy( metadata, localRepository, deploymentRepository );
+ throw new ArtifactDeploymentException( "Error deploying artifact: " + e.getMessage(), e );
+ }
+ catch ( RepositoryMetadataDeploymentException e )
+ {
+ throw new ArtifactDeploymentException( "Error installing artifact's metadata: " + e.getMessage(), e );
}
- // TODO: would like to flush this, but the plugin metadata is added in advance, not as an install/deploy transformation
- // This would avoid the need to merge and clear out the state during deployment
-// artifact.getMetadataList().clear();
- }
- catch ( TransferFailedException e )
- {
- throw new ArtifactDeploymentException( "Error deploying artifact: " + e.getMessage(), e );
}
- catch ( IOException e )
+ }
+
+ private boolean artifactHasBeenDeployed( Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactDeploymentException
+ {
+ try
{
- throw new ArtifactDeploymentException( "Error deploying artifact: " + e.getMessage(), e );
+ ArtifactVersion artifactVersion = new DefaultArtifactVersion( artifact.getVersion() );
+
+ List versions = metadataSource.retrieveAvailableVersions( artifact, localRepository,
+ Arrays.asList( new ArtifactRepository[]{remoteRepository} ) );
+
+ for ( Iterator i = versions.iterator(); i.hasNext(); )
+ {
+ ArtifactVersion deployedArtifactVersion = (ArtifactVersion) i.next();
+
+ if ( artifactVersion.compareTo( deployedArtifactVersion ) == 0 )
+ {
+ getLogger().warn( "The artifact " + artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion() + " has already been deployed. Not deploying again." );
+
+ return true;
+ }
+ }
}
- catch ( RepositoryMetadataDeploymentException e )
+ catch ( ArtifactMetadataRetrievalException e )
{
- throw new ArtifactDeploymentException( "Error installing artifact's metadata: " + e.getMessage(), e );
+ getLogger().warn( "We cannot retrieve the artifact metadata, or it does not exist. We will assume this artifact needs to be deployed." );
+
+ return false;
}
+
+ return false;
}
}