MRELEASE-985 Override snapshot dependencies from command line
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
index 2eb77d6..375861b 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
@@ -108,22 +108,36 @@
// Create a config containing values from the session properties (ie command line properties with cli).
ReleaseUtils.copyPropertiesToReleaseDescriptor( prepareRequest.getUserProperties(),
- new ReleaseDescriptorBuilder()
- {
- public ReleaseDescriptorBuilder addDevelopmentVersion( String key,
- String value )
- {
- builder.addDevelopmentVersion( key, value );
- return this;
- }
+ new ReleaseDescriptorBuilder()
+ {
+ public ReleaseDescriptorBuilder addDevelopmentVersion( String key,
+ String value )
+ {
+ builder.addDevelopmentVersion( key, value );
+ return this;
+ }
- public ReleaseDescriptorBuilder addReleaseVersion( String key,
- String value )
- {
- builder.addReleaseVersion( key, value );
- return this;
- };
- } );
+ public ReleaseDescriptorBuilder addReleaseVersion( String key,
+ String value )
+ {
+ builder.addReleaseVersion( key, value );
+ return this;
+ }
+
+ public ReleaseDescriptorBuilder addDependencyReleaseVersion( String dependencyKey,
+ String version )
+ {
+ builder.addDependencyReleaseVersion( dependencyKey, version );
+ return this;
+ }
+
+ public ReleaseDescriptorBuilder addDependencyDevelopmentVersion( String dependencyKey,
+ String version )
+ {
+ builder.addDependencyDevelopmentVersion( dependencyKey, version );
+ return this;
+ }
+ } );
BuilderReleaseDescriptor config;
if ( BooleanUtils.isNotFalse( prepareRequest.getResume() ) )
@@ -132,7 +146,7 @@
}
else
{
- config = ReleaseUtils.buildReleaseDescriptor( prepareRequest.getReleaseDescriptorBuilder() );
+ config = ReleaseUtils.buildReleaseDescriptor( builder );
}
Strategy releaseStrategy = getStrategy( config.getReleaseStrategyId() );
@@ -667,4 +681,4 @@
result.setResultCode( ReleaseResult.ERROR );
}
-}
\ No newline at end of file
+}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
index 4dd43b7..37603d1 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
@@ -305,20 +305,25 @@
private static boolean checkArtifact( Artifact artifact, ReleaseDescriptor releaseDescriptor )
{
String versionlessKey = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+ String releaseDescriptorResolvedVersion = releaseDescriptor.getDependencyReleaseVersion( versionlessKey );
+
+ boolean releaseDescriptorResolvedVersionIsSnapshot = releaseDescriptorResolvedVersion == null
+ || releaseDescriptorResolvedVersion.contains( Artifact.SNAPSHOT_VERSION );
// We are only looking at dependencies external to the project - ignore anything found in the reactor as
// it's version will be updated
- boolean result = artifact.isSnapshot()
- && !artifact.getBaseVersion().equals( releaseDescriptor.getProjectOriginalVersion( versionlessKey ) );
+ boolean bannedVersion = artifact.isSnapshot()
+ && !artifact.getBaseVersion().equals( releaseDescriptor.getProjectOriginalVersion( versionlessKey ) )
+ && releaseDescriptorResolvedVersionIsSnapshot;
// If we have a snapshot but allowTimestampedSnapshots is true, accept the artifact if the version
// indicates that it is a timestamped snapshot.
- if ( result && releaseDescriptor.isAllowTimestampedSnapshots() )
+ if ( bannedVersion && releaseDescriptor.isAllowTimestampedSnapshots() )
{
- result = artifact.getVersion().indexOf( Artifact.SNAPSHOT_VERSION ) >= 0;
+ bannedVersion = artifact.getVersion().indexOf( Artifact.SNAPSHOT_VERSION ) >= 0;
}
- return result;
+ return bannedVersion;
}
@Override
@@ -456,4 +461,4 @@
releaseDescriptor.addDependencyDevelopmentVersion( versionlessKey, result );
}
}
-}
\ No newline at end of file
+}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
index 2b0edf6..2b0dff2 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
@@ -30,7 +30,9 @@
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import org.apache.maven.project.MavenProject;
@@ -108,6 +110,35 @@
assertTrue( true );
}
+ // MRELEASE-985
+ @Test
+ public void testSnapshotDependenciesInProjectAndResolveFromCommandLine() throws Exception {
+ List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-snapshot-dependencies-no-reactor" );
+ ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
+ builder.addDependencyReleaseVersion("groupId:test", "1.0");
+ builder.addDependencyDevelopmentVersion("groupId:test", "1.1");
+
+ try
+ {
+ phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
+ assertTrue( true );
+ }
+ catch ( ReleaseFailureException e )
+ {
+ fail( "There should be no failed execution" );
+ }
+
+ try
+ {
+ phase.simulate( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
+ assertTrue( true );
+ }
+ catch ( ReleaseFailureException e )
+ {
+ fail( "There should be no failed execution" );
+ }
+ }
+
@Test
public void testSnapshotDependenciesInProjectOnly()
throws Exception
@@ -498,10 +529,10 @@
new VersionPair( "1.0", "1.0" ) ) );
phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
-
+
// validate
ReleaseDescriptor descriptor = ReleaseUtils.buildReleaseDescriptor( builder );
-
+
assertEquals( "1.0", descriptor.getDependencyReleaseVersion( "external:artifactId" ) );
assertEquals( "1.1-SNAPSHOT", descriptor.getDependencyDevelopmentVersion( "external:artifactId" ) );
diff --git a/maven-release-manager/src/test/resources/projects/check-dependencies/internal-snapshot-dependencies-no-reactor/pom.xml b/maven-release-manager/src/test/resources/projects/check-dependencies/internal-snapshot-dependencies-no-reactor/pom.xml
new file mode 100644
index 0000000..c62fbfa
--- /dev/null
+++ b/maven-release-manager/src/test/resources/projects/check-dependencies/internal-snapshot-dependencies-no-reactor/pom.xml
@@ -0,0 +1,31 @@
+<!--
+ ~ Copyright 2005-2006 The Apache Software Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>groupId</groupId>
+ <artifactId>artifactId</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>groupId</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>