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 <[email protected]> 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:[email protected]">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 "[email protected]" <[email protected]>.
