You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/08/22 21:01:15 UTC

svn commit: r239219 - in /maven/components/trunk: maven-archiver/src/main/java/org/apache/maven/archiver/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/...

Author: jdcasey
Date: Mon Aug 22 12:00:51 2005
New Revision: 239219

URL: http://svn.apache.org/viewcvs?rev=239219&view=rev
Log:
Resolving: MNG-251

o Added transformation manager
o snapshot timestamp/buildnumber is now managed from the transformation rather than the metadata
o maven-archiver now clones the MavenProject and resolves snapshot versions for introduction into manifest and exported pom.


Added:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java   (with props)
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java   (with props)
Modified:
    maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
    maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml

Modified: maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java (original)
+++ maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java Mon Aug 22 12:00:51 2005
@@ -42,7 +42,7 @@
 public class MavenArchiver
 {
     private JarArchiver archiver = new JarArchiver();
-
+    
     private File archiveFile;
 
     /**
@@ -59,6 +59,14 @@
         m.addConfiguredAttribute( buildAttr );
         Manifest.Attribute createdAttr = new Manifest.Attribute( "Created-By", "Apache Maven" );
         m.addConfiguredAttribute( createdAttr );
+        
+        Artifact projectArtifact = project.getArtifact();
+        
+        if ( projectArtifact.isSnapshot() )
+        {
+            Manifest.Attribute buildNumberAttr = new Manifest.Attribute( "Build-Number", "" + project.getSnapshotDeploymentBuildNumber() );
+            m.addConfiguredAttribute( buildNumberAttr );
+        }
 
         if ( config.getPackageName() != null )
         {
@@ -214,12 +222,21 @@
         // top-level POM elements so that applications that wish to access
         // POM information without the use of maven tools can do so.
         // ----------------------------------------------------------------------
+        
+        // we have to clone the project instance so we can write out the pom with the deployment version,
+        // without impacting the main project instance...
+        MavenProject workingProject = new MavenProject( project );
+        
+        if ( workingProject.getArtifact().isSnapshot() )
+        {
+            workingProject.setVersion( workingProject.getSnapshotDeploymentVersion() );
+        }
+        
+        String groupId = workingProject.getGroupId();
 
-        String groupId = project.getGroupId();
-
-        String artifactId = project.getArtifactId();
+        String artifactId = workingProject.getArtifactId();
 
-        File exportReadyPom = writeExportReadyPom( project );
+        File exportReadyPom = writeExportReadyPom( workingProject );
 
         archiver.addFile( exportReadyPom, "META-INF/maven/" + groupId + "/" + artifactId + "/pom.xml" );
 
@@ -229,13 +246,13 @@
 
         Properties p = new Properties();
 
-        p.setProperty( "groupId", project.getGroupId() );
+        p.setProperty( "groupId", workingProject.getGroupId() );
 
-        p.setProperty( "artifactId", project.getArtifactId() );
+        p.setProperty( "artifactId", workingProject.getArtifactId() );
 
-        p.setProperty( "version", project.getVersion() );
+        p.setProperty( "version", workingProject.getVersion() );
 
-        File pomPropertiesFile = new File( project.getFile().getParentFile(), "pom.properties" );
+        File pomPropertiesFile = new File( workingProject.getFile().getParentFile(), "pom.properties" );
 
         OutputStream os = new FileOutputStream( pomPropertiesFile );
 
@@ -256,7 +273,7 @@
             archiver.setManifest( manifestFile );
         }
 
-        Manifest manifest = getManifest( project, archiveConfiguration.getManifest() );
+        Manifest manifest = getManifest( workingProject, archiveConfiguration.getManifest() );
 
         // Configure the jar
         archiver.addConfiguredManifest( manifest );

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java Mon Aug 22 12:00:51 2005
@@ -21,7 +21,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.TransferFailedException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
@@ -29,15 +29,14 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.List;
 
 public class DefaultArtifactDeployer
     extends AbstractLogEnabled
     implements ArtifactDeployer
 {
     private WagonManager wagonManager;
-
-    private List artifactTransformations;
+    
+    private ArtifactTransformationManager transformationManager;
 
     /** @deprecated we want to use the artifact method only, and ensure artifact.file is set correctly. */
     public void deploy( String basedir, String finalName, Artifact artifact, ArtifactRepository deploymentRepository,
@@ -55,12 +54,7 @@
     {
         try
         {
-            // TODO: better to have a transform manager, or reuse the handler manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
-            {
-                ArtifactTransformation transform = (ArtifactTransformation) i.next();
-                transform.transformForDeployment( artifact, deploymentRepository );
-            }
+            transformationManager.transformForDeployment( artifact, localRepository );
 
             // Copy the original file to the new one if it was transformed
             File artifactFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java Mon Aug 22 12:00:51 2005
@@ -20,20 +20,19 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.List;
 
 public class DefaultArtifactInstaller
     extends AbstractLogEnabled
     implements ArtifactInstaller
 {
-    private List artifactTransformations;
+    private ArtifactTransformationManager transformationManager;
 
     /** @deprecated we want to use the artifact method only, and ensure artifact.file is set correctly. */
     public void install( String basedir, String finalName, Artifact artifact, ArtifactRepository localRepository )
@@ -50,12 +49,7 @@
     {
         try
         {
-            // TODO: better to have a transform manager, or reuse the handler manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
-            {
-                ArtifactTransformation transform = (ArtifactTransformation) i.next();
-                transform.transformForInstall( artifact, localRepository );
-            }
+            transformationManager.transformForInstall( artifact, localRepository );
 
             String localPath = localRepository.pathOf( artifact );
 

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java Mon Aug 22 12:00:51 2005
@@ -43,9 +43,6 @@
 
     private static final String UTC_TIMESTAMP_PATTERN = "yyyyMMdd.HHmmss";
 
-    // TODO: very quick and nasty hack to get the same timestamp across a build - not embedder friendly
-    private static String sessionTimestamp = null;
-
     public SnapshotArtifactMetadata( Artifact artifact )
     {
         super( artifact, artifact.getArtifactId() + "-" + artifact.getBaseVersion() + "." + SNAPSHOT_VERSION_FILE );
@@ -83,11 +80,22 @@
             buildNumber = 0;
         }
     }
+    
+    public void setVersion( String timestamp, int buildNumber )
+    {
+        this.timestamp = timestamp;
+        this.buildNumber = buildNumber;
+    }
 
     public String getTimestamp()
     {
         return timestamp;
     }
+    
+    public int getBuildNumber()
+    {
+        return buildNumber;
+    }
 
     public static DateFormat getUtcDateFormatter()
     {
@@ -95,22 +103,6 @@
         utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
         return utcDateFormatter;
     }
-
-    public void update()
-    {
-        this.buildNumber++;
-        timestamp = getSessionTimestamp();
-    }
-
-    private static String getSessionTimestamp()
-    {
-        if ( sessionTimestamp == null )
-        {
-            sessionTimestamp = getUtcDateFormatter().format( new Date() );
-        }
-        return sessionTimestamp;
-    }
-
 
     public int compareTo( Object o )
     {

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Mon Aug 22 12:00:51 2005
@@ -24,7 +24,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -46,8 +46,8 @@
     // ----------------------------------------------------------------------
 
     private WagonManager wagonManager;
-
-    private List artifactTransformations;
+    
+    private ArtifactTransformationManager transformationManager;
 
     protected ArtifactFactory artifactFactory;
 
@@ -86,18 +86,13 @@
 
             artifact.setFile( new File( localRepository.getBasedir(), localPath ) );
 
-            // TODO: better to have a transform manager, or reuse the handler manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+            try
+            {
+                transformationManager.transformForResolve( artifact, remoteRepositories, localRepository );
+            }
+            catch ( ArtifactMetadataRetrievalException e )
             {
-                ArtifactTransformation transform = (ArtifactTransformation) i.next();
-                try
-                {
-                    transform.transformForResolve( artifact, remoteRepositories, localRepository );
-                }
-                catch ( ArtifactMetadataRetrievalException e )
-                {
-                    throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
-                }
+                throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
             }
 
             File destination = artifact.getFile();

Added: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java?rev=239219&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java (added)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java Mon Aug 22 12:00:51 2005
@@ -0,0 +1,63 @@
+package org.apache.maven.artifact.transform;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class DefaultArtifactTransformationManager
+    implements ArtifactTransformationManager
+{
+
+    private List artifactTransformations;
+    
+    private SnapshotTransformation snapshotTransformation;
+
+    public void transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) i.next();
+            transform.transformForResolve( artifact, remoteRepositories, localRepository );
+        }
+    }
+
+    public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) i.next();
+            transform.transformForInstall( artifact, localRepository );
+        }
+    }
+
+    public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) i.next();
+            transform.transformForDeployment( artifact, remoteRepository );
+        }
+    }
+
+    public String getSnapshotDeploymentTimestamp()
+    {
+        return snapshotTransformation.getDeploymentTimestamp();
+    }
+
+    public int getSnapshotDeploymentBuildNumber( Artifact artifact )
+    {
+        return snapshotTransformation.getDeploymentBuildNumber( artifact);
+    }
+
+    public String getSnapshotDeploymentVersion( Artifact snapshotArtifact )
+    {
+        return snapshotTransformation.getDeploymentVersion( snapshotArtifact );
+    }
+
+}

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java Mon Aug 22 12:00:51 2005
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.SnapshotArtifactMetadata;
@@ -24,7 +25,10 @@
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
@@ -35,6 +39,12 @@
 public class SnapshotTransformation
     extends AbstractVersionTransformation
 {
+    private String deploymentTimestamp;
+
+    private int deploymentBuildNumber = 1;
+
+    private Map buildNumbers = new HashMap();
+
     public void transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactMetadataRetrievalException
     {
@@ -66,6 +76,8 @@
             {
                 metadata = (SnapshotArtifactMetadata) retrieveFromRemoteRepository( artifact, remoteRepository, null,
                                                                                     ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+                
+                updateDeploymentBuildNumber( artifact, metadata.getTimestamp(), metadata.getBuildNumber() );
             }
             catch ( ResourceDoesNotExistException e )
             {
@@ -77,7 +89,7 @@
                 metadata = (SnapshotArtifactMetadata) createMetadata( artifact );
             }
 
-            metadata.update();
+            metadata.setVersion( getDeploymentTimestamp(), deploymentBuildNumber );
 
             artifact.setResolvedVersion( metadata.constructVersion() );
 
@@ -85,9 +97,62 @@
         }
     }
 
+    private void updateDeploymentBuildNumber( Artifact artifact, String timestamp, int buildNumberFromMetadata )
+    {
+        // we only have to handle bumping the build number if we're on the same timestamp, somehow...miraculously
+        if ( deploymentTimestamp.equals( timestamp ) )
+        {
+            String artifactKey = ArtifactUtils.versionlessKey( artifact );
+            
+            Integer buildNum = (Integer) buildNumbers.get( artifactKey );
+            
+            if ( buildNum == null || buildNum.intValue() <= buildNumberFromMetadata )
+            {
+                buildNum = new Integer( buildNumberFromMetadata + 1 );
+                
+                buildNumbers.put( artifactKey, buildNum );
+            }
+        }
+    }
+
+    public String getDeploymentTimestamp()
+    {
+        if ( deploymentTimestamp == null )
+        {
+            deploymentTimestamp = SnapshotArtifactMetadata.getUtcDateFormatter().format( new Date() );
+        }
+        return deploymentTimestamp;
+    }
+    
+    public int getDeploymentBuildNumber( Artifact artifact )
+    {
+        String artifactKey = ArtifactUtils.versionlessKey( artifact );
+        
+        Integer buildNum = (Integer) buildNumbers.get( artifactKey );
+        
+        if ( buildNum == null )
+        {
+            buildNum = new Integer( 1 );
+            buildNumbers.put( artifactKey, buildNum );
+        }
+        
+        return buildNum.intValue();
+    }
+
     protected AbstractVersionArtifactMetadata createMetadata( Artifact artifact )
     {
         return new SnapshotArtifactMetadata( artifact );
+    }
+
+    public String getDeploymentVersion( Artifact artifact )
+    {
+        int buildnum = getDeploymentBuildNumber( artifact );
+        
+        SnapshotArtifactMetadata metadata = (SnapshotArtifactMetadata) createMetadata( artifact );
+        
+        metadata.setVersion( getDeploymentTimestamp(), buildnum );
+        
+        return metadata.constructVersion();
     }
 
 }

Modified: maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml Mon Aug 22 12:00:51 2005
@@ -47,6 +47,28 @@
         </requirement>
       </requirements>
     </component>
+    
+    <!--
+     |
+     | ArtifactTransformationManager
+     |
+     -->
+    <component>
+      <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
+      <implementation>org.apache.maven.artifact.transform.DefaultArtifactTransformationManager</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
+          <field-name>artifactTransformations</field-name>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
+          <role-hint>snapshot</role-hint>
+          <field-name>snapshotTransformation</field-name>
+        </requirement>
+      </requirements>
+    </component>
+
     <!--
      |
      | Resolver
@@ -60,8 +82,7 @@
           <role>org.apache.maven.artifact.manager.WagonManager</role>
         </requirement>
         <requirement>
-          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
         <requirement>
           <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
@@ -82,8 +103,7 @@
       <implementation>org.apache.maven.artifact.installer.DefaultArtifactInstaller</implementation>
       <requirements>
         <requirement>
-          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
       </requirements>
     </component>
@@ -101,8 +121,7 @@
           <role>org.apache.maven.artifact.manager.WagonManager</role>
         </requirement>
         <requirement>
-          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
       </requirements>
     </component>

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java Mon Aug 22 12:00:51 2005
@@ -61,4 +61,5 @@
      */
     void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
         throws ArtifactMetadataRetrievalException;
+    
 }

Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java?rev=239219&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java Mon Aug 22 12:00:51 2005
@@ -0,0 +1,62 @@
+package org.apache.maven.artifact.transform;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.List;
+
+/**
+ * Manages multiple ArtifactTransformation instances and applies them in succession.
+ */
+public interface ArtifactTransformationManager
+{
+    String ROLE = ArtifactTransformationManager.class.getName();
+
+    /**
+     * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param remoteRepositories the repositories to check
+     * @param localRepository the local repository
+     */
+    void transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Take in a artifact and return the transformed artifact for locating in the local repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param localRepository the local repository it will be stored in
+     */
+    void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Take in a artifact and return the transformed artifact for distributing toa remote repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param remoteRepository the repository to deploy to
+     */
+    void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Return the timestamp which will be used to deploy artifacts from this build.
+     */
+    String getSnapshotDeploymentTimestamp();
+
+    /**
+     * Return the buildnumber which will be used to deploy artifacts from this build.
+     */
+    int getSnapshotDeploymentBuildNumber( Artifact snapshotArtifact );
+    
+    /**
+     * Return the artifact-version which will be used to deploy artifacts from this build.
+     */
+    String getSnapshotDeploymentVersion( Artifact snapshotArtifact );
+
+}

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Aug 22 12:00:51 2005
@@ -26,6 +26,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Build;
@@ -120,6 +121,8 @@
 
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 
+    private ArtifactTransformationManager transformationManager;
+
     private final Map modelCache = new HashMap();
 
     public static final String MAVEN_MODEL_VERSION = "4.0.0";
@@ -576,6 +579,13 @@
         Artifact projectArtifact = artifactFactory.createBuildArtifact( project.getGroupId(), project.getArtifactId(),
                                                                         project.getVersion(), project.getPackaging() );
         project.setArtifact( projectArtifact );
+        
+        if ( projectArtifact.isSnapshot() )
+        {
+            project.setSnapshotDeploymentVersion( transformationManager.getSnapshotDeploymentVersion( projectArtifact ) );
+            
+            project.setSnapshotDeploymentBuildNumber( transformationManager.getSnapshotDeploymentBuildNumber( projectArtifact ) );
+        }
 
         project.setPluginArtifactRepositories( ProjectUtils.buildArtifactRepositories( model.getPluginRepositories(),
                                                                                        artifactRepositoryFactory,

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon Aug 22 12:00:51 2005
@@ -137,6 +137,10 @@
 
     private Build buildOverlay;
 
+    private String snapshotDeploymentVersion;
+
+    private int snapshotDeploymentBuildNumber = -1;
+
     public MavenProject( Model model )
     {
         this.model = model;
@@ -182,6 +186,9 @@
         {
             this.originalModel = ModelUtils.cloneModel( project.originalModel );
         }
+        
+        this.snapshotDeploymentVersion = project.snapshotDeploymentVersion;
+        this.snapshotDeploymentBuildNumber = project.snapshotDeploymentBuildNumber;
 
         // TODO: need to clone this too?
         this.artifact = project.artifact;
@@ -1340,6 +1347,33 @@
 
     public void attachArtifact( String type, String classifier, File file )
     {
+    }
+
+    public void setSnapshotDeploymentVersion( String deploymentVersion )
+    {
+        this.snapshotDeploymentVersion = deploymentVersion;
+    }
+    
+    public String getSnapshotDeploymentVersion()
+    {
+        if ( snapshotDeploymentVersion == null )
+        {
+            return getVersion();
+        }
+        else
+        {
+            return snapshotDeploymentVersion;
+        }
+    }
+    
+    public void setSnapshotDeploymentBuildNumber( int deploymentBuildNumber )
+    {
+        this.snapshotDeploymentBuildNumber = deploymentBuildNumber;
+    }
+    
+    public int getSnapshotDeploymentBuildNumber()
+    {
+        return snapshotDeploymentBuildNumber;
     }
     
 }

Modified: maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml Mon Aug 22 12:00:51 2005
@@ -51,6 +51,9 @@
       <implementation>org.apache.maven.project.DefaultMavenProjectBuilder</implementation>
       <requirements>
         <requirement>
+          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.profiles.MavenProfilesBuilder</role>
         </requirement>
         <requirement>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org