You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2018/01/13 15:43:35 UTC
[maven-release] 02/02: [MRELEASE-956] Release Strategy Interface
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-release.git
commit bea23130c9cf66fbc21061822d185b331a2c93b3
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Jan 13 16:43:25 2018 +0100
[MRELEASE-956] Release Strategy Interface
---
.../maven/shared/release/strategy/Strategy.java | 68 +++++++++
.../src/main/components-fragment.xml | 15 +-
.../shared/release/DefaultReleaseManager.java | 160 +++++++++++++--------
.../maven/shared/release/ReleaseManager.java | 3 +-
.../config/PropertiesReleaseDescriptorStore.java | 8 ++
.../maven/shared/release/config/ReleaseUtils.java | 3 +
.../shared/release/strategies/DefaultStrategy.java | 112 +++++++++++++++
.../src/main/mdo/release-descriptor.mdo | 9 ++
.../shared/release/DefaultReleaseManagerTest.java | 5 +-
.../shared/release/DefaultReleaseManagerTest.xml | 23 +++
.../maven/plugins/release/AbstractReleaseMojo.java | 12 ++
.../maven/plugins/release/CleanReleaseMojo.java | 10 +-
.../plugins/release/CleanReleaseMojoTest.java | 5 +-
.../plugins/release/PrepareReleaseMojoTest.java | 3 -
.../plugins/release/StageReleaseMojoTest.java | 6 -
15 files changed, 357 insertions(+), 85 deletions(-)
diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java
new file mode 100644
index 0000000..faca146
--- /dev/null
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java
@@ -0,0 +1,68 @@
+package org.apache.maven.shared.release.strategy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.util.List;
+
+/**
+ * Interface to override default strategy.
+ *
+ * If a method returns {@code null}, the default will be used, otherwise the provided collection of phaseIds
+ *
+ * @author Robert Scholte
+ * @since 3.0.0
+ */
+public interface Strategy
+{
+ /**
+ * The release phases to execute the calling the prepare goal
+ *
+ * @return
+ */
+ List<String> getPreparePhases();
+
+ /**
+ * The release phases to execute the calling the perform goal
+ *
+ * @return
+ */
+ List<String> getPerformPhases();
+
+ /**
+ * The release phases to execute the calling the branch goal
+ *
+ * @return
+ */
+ List<String> getBranchPhases();
+
+ /**
+ * The release phases to execute the calling the rollback goal
+ *
+ * @return
+ */
+ List<String> getRollbackPhases();
+
+ /**
+ * The release phases to execute the calling the update-versions goal
+ *
+ * @return
+ */
+ List<String> getUpdateVersionsPhases();
+}
diff --git a/maven-release-manager/src/main/components-fragment.xml b/maven-release-manager/src/main/components-fragment.xml
index 92ebfd3..6f156e9 100644
--- a/maven-release-manager/src/main/components-fragment.xml
+++ b/maven-release-manager/src/main/components-fragment.xml
@@ -21,20 +21,9 @@
<component-set>
<components>
<component>
- <role>org.apache.maven.shared.release.ReleaseManager</role>
+ <role>org.apache.maven.shared.release.strategy.Strategy</role>
<role-hint>default</role-hint>
- <implementation>org.apache.maven.shared.release.DefaultReleaseManager</implementation>
- <requirements>
- <requirement>
- <role>org.apache.maven.shared.release.phase.ReleasePhase</role>
- <field-name>releasePhases</field-name>
- </requirement>
- <requirement>
- <role>org.apache.maven.shared.release.config.ReleaseDescriptorStore</role>
- <role-hint>properties</role-hint>
- <field-name>configStore</field-name>
- </requirement>
- </requirements>
+ <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
<configuration>
<preparePhases>
<phase>check-poms</phase>
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 c6e45f5..ad93daa 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
@@ -20,7 +20,6 @@ package org.apache.maven.shared.release;
*/
import java.io.File;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
@@ -32,6 +31,9 @@ import org.apache.maven.shared.release.config.ReleaseDescriptor;
import org.apache.maven.shared.release.config.ReleaseDescriptorStore;
import org.apache.maven.shared.release.config.ReleaseDescriptorStoreException;
import org.apache.maven.shared.release.phase.ReleasePhase;
+import org.apache.maven.shared.release.strategy.Strategy;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.StringUtils;
@@ -40,46 +42,27 @@ import org.codehaus.plexus.util.StringUtils;
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
+@Component( role = ReleaseManager.class )
public class DefaultReleaseManager
extends AbstractLogEnabled
implements ReleaseManager
{
- /**
- * The phases of release to run, and in what order.
- */
- private List<String> preparePhases;
-
- /**
- * The phases of release to run to perform.
- */
- private List<String> performPhases;
-
- /**
- * The phases of release to run to rollback changes
- */
- private List<String> rollbackPhases;
-
- /**
- * The phases to create a branch.
- */
- private List<String> branchPhases;
-
- /**
- * The phases to create update versions.
- */
- private List<String> updateVersionsPhases;
+ @Requirement
+ private Map<String, Strategy> strategies;
/**
* The available phases.
*/
+ @Requirement
private Map<String, ReleasePhase> releasePhases;
/**
* The configuration storage.
*/
+ @Requirement( hint = "properties" )
private ReleaseDescriptorStore configStore;
- private static final int PHASE_SKIP = 0, PHASE_START = 1, PHASE_END = 2, GOAL_START = 11, GOAL_END = 12, ERROR = 99;
+ private static final int PHASE_SKIP = 0, PHASE_START = 1, PHASE_END = 2, GOAL_END = 12, ERROR = 99;
@Override
public ReleaseResult prepareWithResult( ReleasePrepareRequest prepareRequest )
@@ -116,8 +99,6 @@ public class DefaultReleaseManager
private void prepare( ReleasePrepareRequest prepareRequest, ReleaseResult result )
throws ReleaseExecutionException, ReleaseFailureException
{
- updateListener( prepareRequest.getReleaseManagerListener(), "prepare", GOAL_START );
-
ReleaseDescriptor config;
if ( BooleanUtils.isNotFalse( prepareRequest.getResume() ) )
{
@@ -129,6 +110,12 @@ public class DefaultReleaseManager
config = prepareRequest.getReleaseDescriptor();
}
+ Strategy releaseStrategy = getStrategy( config.getReleaseStrategyId() );
+
+ List<String> preparePhases = getGoalPhases( releaseStrategy, "prepare" );
+
+ goalStart( prepareRequest.getReleaseManagerListener(), "prepare", preparePhases );
+
// Later, it would be a good idea to introduce a proper workflow tool so that the release can be made up of a
// more flexible set of steps.
@@ -209,10 +196,14 @@ public class DefaultReleaseManager
public void rollback( ReleaseRollbackRequest rollbackRequest )
throws ReleaseExecutionException, ReleaseFailureException
{
- updateListener( rollbackRequest.getReleaseManagerListener(), "rollback", GOAL_START );
-
ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( rollbackRequest.getReleaseDescriptor(), null );
+ Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+ List<String> rollbackPhases = getGoalPhases( releaseStrategy, "rollback" );
+
+ goalStart( rollbackRequest.getReleaseManagerListener(), "rollback", rollbackPhases );
+
for ( String name : rollbackPhases )
{
ReleasePhase phase = releasePhases.get( name );
@@ -269,11 +260,15 @@ public class DefaultReleaseManager
private void perform( ReleasePerformRequest performRequest, ReleaseResult result )
throws ReleaseExecutionException, ReleaseFailureException
{
- updateListener( performRequest.getReleaseManagerListener(), "perform", GOAL_START );
-
ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( performRequest.getReleaseDescriptor(),
performRequest.getReleaseManagerListener() );
+ Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+ List<String> performPhases = getGoalPhases( releaseStrategy, "perform" );
+
+ goalStart( performRequest.getReleaseManagerListener(), "perform", performPhases );
+
for ( String name : performPhases )
{
ReleasePhase phase = releasePhases.get( name );
@@ -328,10 +323,14 @@ public class DefaultReleaseManager
ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( branchRequest.getReleaseDescriptor(),
branchRequest.getReleaseManagerListener() );
- updateListener( branchRequest.getReleaseManagerListener(), "branch", GOAL_START );
-
boolean dryRun = BooleanUtils.isTrue( branchRequest.getDryRun() );
+ Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+ List<String> branchPhases = getGoalPhases( releaseStrategy, "branch" );
+
+ goalStart( branchRequest.getReleaseManagerListener(), "branch", branchPhases );
+
for ( String name : branchPhases )
{
ReleasePhase phase = releasePhases.get( name );
@@ -370,11 +369,15 @@ public class DefaultReleaseManager
public void updateVersions( ReleaseUpdateVersionsRequest updateVersionsRequest )
throws ReleaseExecutionException, ReleaseFailureException
{
- updateListener( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_START );
-
ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( updateVersionsRequest.getReleaseDescriptor(),
updateVersionsRequest.getReleaseManagerListener() );
+ Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+ List<String> updateVersionsPhases = getGoalPhases( releaseStrategy, "updateVersions" );
+
+ goalStart( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", updateVersionsPhases );
+
for ( String name : updateVersionsPhases )
{
ReleasePhase phase = releasePhases.get( name );
@@ -438,7 +441,7 @@ public class DefaultReleaseManager
}
- protected void clean( AbstractReleaseRequest releaseRequest )
+ protected void clean( AbstractReleaseRequest releaseRequest ) throws ReleaseFailureException
{
ReleaseCleanRequest cleanRequest = new ReleaseCleanRequest();
cleanRequest.setReleaseDescriptor( releaseRequest.getReleaseDescriptor() );
@@ -449,15 +452,21 @@ public class DefaultReleaseManager
}
@Override
- public void clean( ReleaseCleanRequest cleanRequest )
+ public void clean( ReleaseCleanRequest cleanRequest ) throws ReleaseFailureException
{
updateListener( cleanRequest.getReleaseManagerListener(), "cleanup", PHASE_START );
getLogger().info( "Cleaning up after release..." );
- configStore.delete( cleanRequest.getReleaseDescriptor() );
- Set<String> phases = new LinkedHashSet<>( preparePhases );
- phases.addAll( branchPhases );
+ ReleaseDescriptor releaseDescriptor = cleanRequest.getReleaseDescriptor();
+
+ configStore.delete( releaseDescriptor );
+
+ Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+ Set<String> phases = new LinkedHashSet<>();
+ phases.addAll( getGoalPhases( releaseStrategy, "prepare" ) );
+ phases.addAll( getGoalPhases( releaseStrategy, "branch" ) );
for ( String name : phases )
{
@@ -474,15 +483,20 @@ public class DefaultReleaseManager
this.configStore = configStore;
}
+ void goalStart( ReleaseManagerListener listener, String goal, List<String> phases )
+ {
+ if ( listener != null )
+ {
+ listener.goalStart( goal, phases );
+ }
+ }
+
void updateListener( ReleaseManagerListener listener, String name, int state )
{
if ( listener != null )
{
switch ( state )
{
- case GOAL_START:
- listener.goalStart( name, getGoalPhases( name ) );
- break;
case GOAL_END:
listener.goalEnd();
break;
@@ -501,29 +515,63 @@ public class DefaultReleaseManager
}
}
- private List<String> getGoalPhases( String name )
+ private Strategy getStrategy( String strategyId ) throws ReleaseFailureException
{
- List<String> phases = new ArrayList<>();
+ Strategy strategy = strategies.get( strategyId );
+ if ( strategy == null )
+ {
+ throw new ReleaseFailureException( "Unknown strategy: " + strategyId );
+ }
+ return strategy;
+ }
- if ( "prepare".equals( name ) )
+ private List<String> getGoalPhases( Strategy strategy, String goal )
+ {
+ List<String> phases;
+
+ if ( "prepare".equals( goal ) )
{
- phases.addAll( preparePhases );
+ phases = strategy.getPreparePhases();
+ if ( phases == null )
+ {
+ phases = strategies.get( "default" ).getPreparePhases();
+ }
}
- else if ( "perform".equals( name ) )
+ else if ( "perform".equals( goal ) )
{
- phases.addAll( performPhases );
+ phases = strategy.getPerformPhases();
+ if ( phases == null )
+ {
+ phases = strategies.get( "default" ).getPerformPhases();
+ }
}
- else if ( "rollback".equals( name ) )
+ else if ( "rollback".equals( goal ) )
{
- phases.addAll( rollbackPhases );
+ phases = strategy.getRollbackPhases();
+ if ( phases == null )
+ {
+ phases = strategies.get( "default" ).getRollbackPhases();
+ }
}
- else if ( "branch".equals( name ) )
+ else if ( "branch".equals( goal ) )
{
- phases.addAll( branchPhases );
+ phases = strategy.getBranchPhases();
+ if ( phases == null )
+ {
+ phases = strategies.get( "default" ).getBranchPhases();
+ }
}
- else if ( "updateVersions".equals( name ) )
+ else if ( "updateVersions".equals( goal ) )
+ {
+ phases = strategy.getUpdateVersionsPhases();
+ if ( phases == null )
+ {
+ phases = strategies.get( "default" ).getUpdateVersionsPhases();
+ }
+ }
+ else
{
- phases.addAll( updateVersionsPhases );
+ phases = null;
}
return Collections.unmodifiableList( phases );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
index d8ceb56..cab46b2 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
@@ -55,9 +55,10 @@ public interface ReleaseManager
* Clean a release.
*
* @param cleanRequest all clean arguments
+ * @throws ReleaseFailureException
* @since 2.3
*/
- void clean( ReleaseCleanRequest cleanRequest );
+ void clean( ReleaseCleanRequest cleanRequest ) throws ReleaseFailureException;
/**
* Rollback changes made by the previous release
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
index 8162b5f..673ca9b 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
@@ -223,6 +223,14 @@ public class PropertiesReleaseDescriptorStore
{
properties.setProperty( "projectVersionPolicyId", config.getProjectVersionPolicyId() );
}
+ if ( config.getProjectNamingPolicyId() != null )
+ {
+ properties.setProperty( "projectNamingPolicyId", config.getProjectNamingPolicyId() );
+ }
+ if ( config.getReleaseStrategyId() != null )
+ {
+ properties.setProperty( "releaseStrategyId", config.getReleaseStrategyId() );
+ }
properties.setProperty( "exec.snapshotReleasePluginAllowed",
Boolean.toString( config.isSnapshotReleasePluginAllowed() ) );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
index 54fc026..743b062 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
@@ -125,6 +125,8 @@ public class ReleaseUtils
toBeMerged.getProjectVersionPolicyId() ) );
mergeInto.setProjectNamingPolicyId( mergeDefault( mergeInto.getProjectNamingPolicyId(),
toBeMerged.getProjectNamingPolicyId() ) );
+ mergeInto.setReleaseStrategyId( mergeOverride( mergeInto.getReleaseStrategyId(),
+ toBeMerged.getReleaseStrategyId() ) );
return mergeInto;
}
@@ -166,6 +168,7 @@ public class ReleaseUtils
releaseDescriptor.setCompletionGoals( properties.getProperty( "completionGoals" ) );
releaseDescriptor.setProjectVersionPolicyId( properties.getProperty( "projectVersionPolicyId" ) );
releaseDescriptor.setProjectNamingPolicyId( properties.getProperty( "projectNamingPolicyId" ) );
+ releaseDescriptor.setReleaseStrategyId( properties.getProperty( "releaseStrategyId" ) );
String snapshotReleasePluginAllowedStr = properties.getProperty( "exec.snapshotReleasePluginAllowed" );
releaseDescriptor.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null
? false
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java
new file mode 100644
index 0000000..ad5c1ee
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java
@@ -0,0 +1,112 @@
+package org.apache.maven.shared.release.strategies;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.shared.release.strategy.Strategy;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.0.0
+ */
+public class DefaultStrategy implements Strategy
+{
+ /**
+ * The phases of release to run, and in what order.
+ */
+ private List<String> preparePhases;
+
+ /**
+ * The phases of release to run to perform.
+ */
+ private List<String> performPhases;
+
+ /**
+ * The phases of release to run to rollback changes
+ */
+ private List<String> rollbackPhases;
+
+ /**
+ * The phases to create a branch.
+ */
+ private List<String> branchPhases;
+
+ /**
+ * The phases to create update versions.
+ */
+ private List<String> updateVersionsPhases;
+
+ @Override
+ public List<String> getPreparePhases()
+ {
+ return preparePhases;
+ }
+
+ public void setPreparePhases( List<String> preparePhases )
+ {
+ this.preparePhases = preparePhases;
+ }
+
+ @Override
+ public List<String> getPerformPhases()
+ {
+ return performPhases;
+ }
+
+ public void setPerformPhases( List<String> performPhases )
+ {
+ this.performPhases = performPhases;
+ }
+
+ @Override
+ public List<String> getRollbackPhases()
+ {
+ return rollbackPhases;
+ }
+
+ public void setRollbackPhases( List<String> rollbackPhases )
+ {
+ this.rollbackPhases = rollbackPhases;
+ }
+
+ @Override
+ public List<String> getBranchPhases()
+ {
+ return branchPhases;
+ }
+
+ public void setBranchPhases( List<String> branchPhases )
+ {
+ this.branchPhases = branchPhases;
+ }
+
+ @Override
+ public List<String> getUpdateVersionsPhases()
+ {
+ return updateVersionsPhases;
+ }
+
+ public void setUpdateVersionsPhases( List<String> updateVersionsPhases )
+ {
+ this.updateVersionsPhases = updateVersionsPhases;
+ }
+}
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index c430cb1..6191087 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -452,6 +452,15 @@
The role-hint for the NamingPolicy implementation used to calculate the project branch and tag names.
</description>
</field>
+ <field>
+ <name>releaseStrategyId</name>
+ <version>3.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>
+ The role-hint for the release Strategy implementation.
+ </description>
+ </field>
<field>
<name>remoteTagging</name>
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
index 43a935a..891934e 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
@@ -316,8 +316,11 @@ public class DefaultReleaseManagerTest
ReleaseManager releaseManager = lookup( ReleaseManager.class, "bad-phase-configured" );
ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest();
- prepareRequest.setReleaseDescriptor( new ReleaseDescriptor() );
+ ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+ releaseDescriptor.setReleaseStrategyId( "foo" );
+ prepareRequest.setReleaseDescriptor( releaseDescriptor );
prepareRequest.setReleaseEnvironment( new DefaultReleaseEnvironment() );
+
try
{
releaseManager.prepare( prepareRequest );
diff --git a/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml b/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
index ff18c6a..01fbb8a 100644
--- a/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
+++ b/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
@@ -33,7 +33,16 @@
<role-hint>stub</role-hint>
<field-name>configStore</field-name>
</requirement>
+ <requirement>
+ <role>org.apache.maven.shared.release.strategy.Strategy</role>
+ <field-name>strategies</field-name>
+ </requirement>
</requirements>
+ </component>
+ <component>
+ <role>org.apache.maven.shared.release.strategy.Strategy</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
<configuration>
<preparePhases>
<phase>step1</phase>
@@ -70,6 +79,10 @@
<role-hint>stub</role-hint>
<field-name>configStore</field-name>
</requirement>
+ <requirement>
+ <role>org.apache.maven.shared.release.strategy.Strategy</role>
+ <field-name>strategies</field-name>
+ </requirement>
</requirements>
<configuration>
<preparePhases>
@@ -78,6 +91,16 @@
</configuration>
</component>
<component>
+ <role>org.apache.maven.shared.release.strategy.Strategy</role>
+ <role-hint>foo</role-hint>
+ <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
+ <configuration>
+ <preparePhases>
+ <phase>foo</phase>
+ </preparePhases>
+ </configuration>
+ </component>
+ <component>
<role>org.apache.maven.shared.release.config.ReleaseDescriptorStore</role>
<role-hint>stub</role-hint>
<implementation>org.apache.maven.shared.release.config.ReleaseDescriptorStoreStub</implementation>
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
index faa9805..ed8b0d6 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
@@ -125,6 +125,16 @@ public abstract class AbstractReleaseMojo
protected MavenSession session;
/**
+ * The role-hint for the {@link org.apache.maven.shared.release.strategy.Strategy}
+ * implementation used to specify the phases per goal.
+ *
+ * @since 3.0.0
+ * @see org.apache.maven.shared.release.strategies.DefaultStrategy
+ */
+ @Parameter( defaultValue = "default", property = "releaseStrategyId" )
+ private String releaseStrategyId;
+
+ /**
* Gets the enviroment settings configured for this release.
*
* @return The release environment, never <code>null</code>.
@@ -187,6 +197,8 @@ public abstract class AbstractReleaseMojo
}
}
descriptor.setAdditionalArguments( args );
+
+ descriptor.setReleaseStrategyId( releaseStrategyId );
return descriptor;
}
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
index 4ef5af8..186785b 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
@@ -23,6 +23,7 @@ import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.shared.release.ReleaseCleanRequest;
+import org.apache.maven.shared.release.ReleaseFailureException;
import org.apache.maven.shared.release.config.ReleaseDescriptor;
/**
@@ -50,7 +51,14 @@ public class CleanReleaseMojo
cleanRequest.setReleaseDescriptor( releaseDescriptor );
cleanRequest.setReactorProjects( getReactorProjects() );
- releaseManager.clean( cleanRequest );
+ try
+ {
+ releaseManager.clean( cleanRequest );
+ }
+ catch ( ReleaseFailureException e )
+ {
+ throw new MojoFailureException( e.getMessage() );
+ }
}
}
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
index 6cdd62d..2a972c3 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
@@ -25,12 +25,9 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.io.File;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.shared.release.ReleaseCleanRequest;
import org.apache.maven.shared.release.ReleaseManager;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
import org.mockito.ArgumentCaptor;
/**
@@ -57,7 +54,7 @@ public class CleanReleaseMojoTest
}
public void testClean()
- throws MojoFailureException, MojoExecutionException
+ throws Exception
{
// prepare
ArgumentCaptor<ReleaseCleanRequest> request = ArgumentCaptor.forClass( ReleaseCleanRequest.class );
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
index 76525d7..deca8a5 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
@@ -25,16 +25,13 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.io.File;
-import java.util.List;
import java.util.Properties;
import org.apache.maven.execution.MavenSession;
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
index 882bffa..6ea0bb2 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
@@ -19,15 +19,11 @@ package org.apache.maven.plugins.release;
* under the License.
*/
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.io.File;
-import java.util.List;
import org.apache.maven.model.DistributionManagement;
import org.apache.maven.model.Site;
@@ -36,7 +32,6 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.release.ReleaseManager;
import org.apache.maven.shared.release.ReleasePerformRequest;
import org.apache.maven.shared.release.config.ReleaseDescriptor;
-import org.apache.maven.shared.release.env.ReleaseEnvironment;
import org.mockito.ArgumentCaptor;
/**
@@ -49,7 +44,6 @@ public class StageReleaseMojoTest
{
private File workingDirectory;
- @SuppressWarnings( "unchecked" )
public void testStage()
throws Exception
{
--
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.