diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
index ad2f9acf86..bd32bfea70 100644
--- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
+++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
@@ -38,8 +38,10 @@ public class DefaultArtifactRepository
private ArtifactRepositoryPolicy releases;
+ private boolean uniqueVersion;
+
/**
- * Create a local repository or a deployment repository.
+ * Create a local repository or a test repository.
*
* @param id the unique identifier of the repository
* @param url the URL of the repository
@@ -50,6 +52,21 @@ public class DefaultArtifactRepository
this( id, url, layout, null, null );
}
+ /**
+ * Create a remote deployment repository.
+ *
+ * @param id the unique identifier of the repository
+ * @param url the URL of the repository
+ * @param layout the layout of the repository
+ * @param uniqueVersion whether to assign each snapshot a unique version
+ */
+ public DefaultArtifactRepository( String id, String url, ArtifactRepositoryLayout layout, boolean uniqueVersion )
+ {
+ super( id, url );
+ this.layout = layout;
+ this.uniqueVersion = uniqueVersion;
+ }
+
/**
* Create a remote download repository.
*
@@ -117,4 +134,9 @@ public class DefaultArtifactRepository
{
return getId();
}
+
+ public boolean isUniqueVersion()
+ {
+ return uniqueVersion;
+ }
}
diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
index 691ec58f36..f74fa65318 100644
--- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
+++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
@@ -29,10 +29,10 @@ public class DefaultArtifactRepositoryFactory
private String globalChecksumPolicy;
- public ArtifactRepository createArtifactRepository( String id, String url,
- ArtifactRepositoryLayout repositoryLayout )
+ public ArtifactRepository createDeploymentArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout, boolean uniqueVersion )
{
- return new DefaultArtifactRepository( id, url, repositoryLayout );
+ return new DefaultArtifactRepository( id, url, repositoryLayout, uniqueVersion );
}
public ArtifactRepository createArtifactRepository( String id, String url,
diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
index f151b08288..1c7644ff88 100644
--- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
+++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
@@ -77,10 +77,15 @@ public class SnapshotTransformation
{
if ( artifact.isSnapshot() )
{
+ Snapshot snapshot = new Snapshot();
+ if ( remoteRepository.isUniqueVersion() )
+ {
+ snapshot.setTimestamp( getDeploymentTimestamp() );
+ }
+
+ // we update the build number anyway so that it doesn't get lost. It requires the timestamp to take effect
int buildNumber = resolveLatestSnapshotBuildNumber( artifact, localRepository, remoteRepository );
- Snapshot snapshot = new Snapshot();
- snapshot.setTimestamp( getDeploymentTimestamp() );
snapshot.setBuildNumber( buildNumber + 1 );
RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
index c2f7d92b4b..758414f99f 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
@@ -49,4 +49,6 @@ public interface ArtifactRepository
ArtifactRepositoryLayout getLayout();
String getKey();
+
+ boolean isUniqueVersion();
}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java
index 68cf8bc81a..7dc5213e63 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java
@@ -25,7 +25,8 @@ public interface ArtifactRepositoryFactory
{
String ROLE = ArtifactRepositoryFactory.class.getName();
- ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout );
+ ArtifactRepository createDeploymentArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
+ boolean uniqueVersion );
ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout,
ArtifactRepositoryPolicy snapshots,
@@ -34,5 +35,4 @@ public interface ArtifactRepositoryFactory
void setGlobalUpdatePolicy( String snapshotPolicy );
void setGlobalChecksumPolicy( String checksumPolicy );
-
-}
\ No newline at end of file
+}
diff --git a/maven-model/maven.mdo b/maven-model/maven.mdo
index 0698399bcd..8d8528da64 100644
--- a/maven-model/maven.mdo
+++ b/maven-model/maven.mdo
@@ -1530,7 +1530,7 @@
generated by the project
]]>
- RepositoryBase
+ DeploymentRepository
@@ -1540,7 +1540,7 @@
Where to deploy snapshots of artifacts to. If not given, it defaults to the repository.
- RepositoryBase
+ DeploymentRepository
@@ -2242,6 +2242,36 @@
+
+ DeploymentRepository
+ RepositoryBase
+ 4.0.0
+
+ Repository contains the information needed for deploying to the remote repoistory
+
+
+
+ uniqueVersion
+ Whether to assign snapshots a unique version comprised of the timestamp and build number, or to use the same version each time
+ boolean
+ true
+ 4.0.0
+
+
+
+
+
+ 4.0.0
+
+
+
+
+
RepositoryPolicy
4.0.0
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 3fb6f6e49d..201b338e12 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -632,14 +632,15 @@ public class DefaultMavenProjectBuilder
DistributionManagement dm = model.getDistributionManagement();
if ( dm != null )
{
- ArtifactRepository repo = ProjectUtils.buildArtifactRepositoryBase( dm.getRepository(),
- artifactRepositoryFactory, container );
+ ArtifactRepository repo = ProjectUtils.buildDeploymentArtifactRepository( dm.getRepository(),
+ artifactRepositoryFactory,
+ container );
project.setReleaseArtifactRepository( repo );
if ( dm.getSnapshotRepository() != null )
{
- repo = ProjectUtils.buildArtifactRepositoryBase( dm.getSnapshotRepository(), artifactRepositoryFactory,
- container );
+ repo = ProjectUtils.buildDeploymentArtifactRepository( dm.getSnapshotRepository(),
+ artifactRepositoryFactory, container );
project.setSnapshotArtifactRepository( repo );
}
}
diff --git a/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java b/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
index 45a9552573..f900c0c265 100644
--- a/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
+++ b/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
@@ -42,6 +42,7 @@ import org.apache.maven.model.RepositoryBase;
import org.apache.maven.model.RepositoryPolicy;
import org.apache.maven.model.Resource;
import org.apache.maven.model.Site;
+import org.apache.maven.model.DeploymentRepository;
import org.apache.maven.project.inheritance.DefaultModelInheritanceAssembler;
import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -650,7 +651,7 @@ public final class ModelUtils
if ( repo != null )
{
- RepositoryBase newRepo = new RepositoryBase();
+ DeploymentRepository newRepo = new DeploymentRepository();
newRepo.setId( repo.getId() );
newRepo.setLayout( repo.getLayout() );
@@ -677,7 +678,7 @@ public final class ModelUtils
if ( sRepo != null )
{
- RepositoryBase newRepo = new RepositoryBase();
+ DeploymentRepository newRepo = new DeploymentRepository();
newRepo.setId( sRepo.getId() );
newRepo.setLayout( sRepo.getLayout() );
diff --git a/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java b/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java
index 754578b78b..3f51def211 100644
--- a/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java
+++ b/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java
@@ -23,6 +23,7 @@ import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.model.Repository;
import org.apache.maven.model.RepositoryBase;
import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.model.DeploymentRepository;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -59,9 +60,9 @@ public final class ProjectUtils
return repos;
}
- public static ArtifactRepository buildArtifactRepositoryBase( RepositoryBase repo,
- ArtifactRepositoryFactory artifactRepositoryFactory,
- PlexusContainer container )
+ public static ArtifactRepository buildDeploymentArtifactRepository( DeploymentRepository repo,
+ ArtifactRepositoryFactory artifactRepositoryFactory,
+ PlexusContainer container )
throws ProjectBuildingException
{
if ( repo != null )
@@ -72,7 +73,7 @@ public final class ProjectUtils
// TODO: make this a map inside the factory instead, so no lookup needed
ArtifactRepositoryLayout layout = getRepositoryLayout( repo, container );
- return artifactRepositoryFactory.createArtifactRepository( id, url, layout );
+ return artifactRepositoryFactory.createDeploymentArtifactRepository( id, url, layout, repo.isUniqueVersion() );
}
else
{
diff --git a/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java b/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
index 741312ba7f..531a95191d 100644
--- a/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
+++ b/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
@@ -26,6 +26,7 @@ import org.apache.maven.model.Reporting;
import org.apache.maven.model.Repository;
import org.apache.maven.model.Scm;
import org.apache.maven.model.Site;
+import org.apache.maven.model.DeploymentRepository;
import org.apache.maven.project.ModelUtils;
import org.codehaus.plexus.util.StringUtils;
@@ -474,7 +475,7 @@ public class DefaultModelInheritanceAssembler
{
if ( parentDistMgmt.getRepository() != null )
{
- Repository repository = new Repository();
+ DeploymentRepository repository = new DeploymentRepository();
childDistMgmt.setRepository( repository );
@@ -490,7 +491,7 @@ public class DefaultModelInheritanceAssembler
{
if ( parentDistMgmt.getSnapshotRepository() != null )
{
- Repository repository = new Repository();
+ DeploymentRepository repository = new DeploymentRepository();
childDistMgmt.setSnapshotRepository( repository );