Author: pgier Date: Mon Sep 14 19:36:27 2009 New Revision: 814798 URL: http://svn.apache.org/viewvc?rev=814798&view=rev Log: [MRELEASE-324] Adding a new goal called "update-versions".
Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java (with props) maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java (with props) maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt (with props) Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml maven/release/trunk/maven-release-plugin/src/site/site.xml Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java?rev=814798&r1=814797&r2=814798&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java Mon Sep 14 19:36:27 2009 @@ -69,6 +69,11 @@ private List branchPhases; /** + * The phases to create update versions. + */ + private List updateVersionsPhases; + + /** * The available phases. */ private Map releasePhases; @@ -394,6 +399,36 @@ updateListener( listener, "branch", GOAL_END ); } + public void updateVersions( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects ) + throws ReleaseExecutionException, ReleaseFailureException + { + ReleaseManagerListener listener = null; + + updateListener( listener, "updateVersions", GOAL_START ); + + releaseDescriptor = loadReleaseDescriptor( releaseDescriptor, listener ); + + for ( Iterator phases = updateVersionsPhases.iterator(); phases.hasNext(); ) + { + String name = (String) phases.next(); + + ReleasePhase phase = (ReleasePhase) releasePhases.get( name ); + + if ( phase == null ) + { + throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); + } + + updateListener( listener, name, PHASE_START ); + phase.execute( releaseDescriptor, releaseEnvironment, reactorProjects ); + updateListener( listener, name, PHASE_END ); + } + + clean( releaseDescriptor, listener, reactorProjects ); + + updateListener( listener, "updateVersions", GOAL_END ); + } + /** * Determines the path of the working directory. By default, this is the * checkout directory. For some SCMs, the project root directory is not the @@ -509,6 +544,11 @@ { phases.addAll( branchPhases ); } + else if ( "updateVersions".equals( name ) ) + { + phases.addAll( updateVersionsPhases ); + } + return Collections.unmodifiableList( phases ); } Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java?rev=814798&r1=814797&r2=814798&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java Mon Sep 14 19:36:27 2009 @@ -355,4 +355,17 @@ void branch( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean dryRun, ReleaseManagerListener listener ) throws ReleaseExecutionException, ReleaseFailureException; + + /** + * Update version numbers for a project + * + * @param releaseDescriptor the configuration to use for release + * @param releaseEnvironment settings, maven-home, java-home, etc. to use during release. + * @param reactorProjects the reactor projects + * @throws ReleaseExecutionException if there is a problem during release rollback + * @throws ReleaseFailureException if there is a problem during release rollback + */ + void updateVersions( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects ) + throws ReleaseExecutionException, ReleaseFailureException; + } Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java?rev=814798&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java Mon Sep 14 19:36:27 2009 @@ -0,0 +1,65 @@ +package org.apache.maven.shared.release.phase; + +/* + * 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 org.apache.maven.project.MavenProject; +import org.apache.maven.scm.repository.ScmRepository; +import org.apache.maven.shared.release.ReleaseExecutionException; +import org.apache.maven.shared.release.ReleaseResult; +import org.apache.maven.shared.release.config.ReleaseDescriptor; +import org.jdom.Element; +import org.jdom.Namespace; + +import java.util.List; +import java.util.Map; + +/** + * Rewrite POMs for future development + * + * @author <a href="mailto:br...@apache.org">Brett Porter</a> + */ +public class RewritePomVersionsPhase + extends AbstractRewritePomsPhase +{ + + protected void transformScm( MavenProject project, Element rootElement, Namespace namespace, + ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository, + ReleaseResult result, MavenProject rootProject ) + throws ReleaseExecutionException + { + // We are only updating versions no mods to scm needed + } + + protected Map getOriginalVersionMap( ReleaseDescriptor releaseDescriptor, List reactorProjects ) + { + return releaseDescriptor.getReleaseVersions(); + } + + protected Map getNextVersionMap( ReleaseDescriptor releaseDescriptor ) + { + return releaseDescriptor.getDevelopmentVersions(); + } + + protected String getResolvedSnapshotVersion( String artifactVersionlessKey, Map resolvedSnapshotsMap ) + { + // Only update the pom version, not the dependency versions + return null; + } +} Propchange: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml?rev=814798&r1=814797&r2=814798&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml Mon Sep 14 19:36:27 2009 @@ -80,6 +80,12 @@ <phase>scm-commit-release</phase> <phase>end-release</phase> </branchPhases> + <updateVersionsPhases> + <phase>check-poms</phase> + <phase>create-backup-poms</phase> + <phase>map-development-versions</phase> + <phase>rewrite-pom-versions</phase> + </updateVersionsPhases> </configuration> </component> <component> @@ -200,6 +206,19 @@ </component> <component> <role>org.apache.maven.shared.release.phase.ReleasePhase</role> + <role-hint>rewrite-pom-versions</role-hint> + <implementation>org.apache.maven.shared.release.phase.RewritePomVersionsPhase</implementation> + <configuration> + <pomSuffix>next</pomSuffix> + </configuration> + <requirements> + <requirement> + <role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role> + </requirement> + </requirements> + </component> + <component> + <role>org.apache.maven.shared.release.phase.ReleasePhase</role> <role-hint>scm-commit-rollback</role-hint> <implementation>org.apache.maven.shared.release.phase.ScmCommitPhase</implementation> <requirements> Added: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java?rev=814798&view=auto ============================================================================== --- maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java (added) +++ maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java Mon Sep 14 19:36:27 2009 @@ -0,0 +1,133 @@ +package org.apache.maven.plugins.release; + +/* + * 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.HashMap; +import java.util.Map; + +import org.apache.maven.artifact.ArtifactUtils; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.shared.release.ReleaseExecutionException; +import org.apache.maven.shared.release.ReleaseFailureException; +import org.apache.maven.shared.release.config.ReleaseDescriptor; +import org.apache.maven.shared.release.config.ReleaseUtils; + +/** + * Prepare for a release in SCM. + * + * @author Paul Gier + * @version $Id$ + * @aggregator + * @goal update-versions + */ +public class UpdateVersionsMojo + extends AbstractReleaseMojo +{ + + /** + * Whether to automatically assign submodules the parent version. If set to false, the user will be prompted for the + * version of each submodules. + * + * @parameter expression="${autoVersionSubmodules}" default-value="false" + */ + private boolean autoVersionSubmodules; + + /** + * Whether to add a schema to the POM if it was previously missing on release. + * + * @parameter expression="${addSchema}" default-value="true" + */ + private boolean addSchema; + + /** + * Default version to use for new local working copy. + * + * @parameter expression="${developmentVersion}" + */ + private String developmentVersion; + + /** + * @parameter expression="${session}" + * @readonly + * @required + * @since 2.0-beta-10 + */ + protected MavenSession session; + + /** + * {...@inheritdoc} + */ + public void execute() + throws MojoExecutionException, MojoFailureException + { + super.execute(); + + ReleaseDescriptor config = createReleaseDescriptor(); + config.setAddSchema( addSchema ); + config.setAutoVersionSubmodules( autoVersionSubmodules ); + config.setDefaultDevelopmentVersion( developmentVersion ); + + Map originalScmInfo = new HashMap(); + originalScmInfo.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ), project.getScm() ); + config.setOriginalScmInfo( originalScmInfo ); + + // Create a config containing values from the session properties (ie command line properties with cli). + ReleaseDescriptor sysPropertiesConfig + = ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getExecutionProperties() ); + mergeCommandLineConfig( config, sysPropertiesConfig ); + + try + { + releaseManager.updateVersions( config, getReleaseEnvironment(), reactorProjects ); + } + catch ( ReleaseExecutionException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + catch ( ReleaseFailureException e ) + { + throw new MojoFailureException( e.getMessage() ); + } + } + + /** + * This method takes some of the release configuration picked up from the command line system properties and copies + * it into the release config object. + * + * @param config The release configuration to merge the system properties into, must not be <code>null</code>. + * @param sysPropertiesConfig The configuration from the system properties to merge in, must not be + * <code>null</code>. + */ + private void mergeCommandLineConfig( ReleaseDescriptor config, ReleaseDescriptor sysPropertiesConfig ) + { + // If the user specifies versions, these should override the existing versions + if ( sysPropertiesConfig.getReleaseVersions() != null ) + { + config.getReleaseVersions().putAll( sysPropertiesConfig.getReleaseVersions() ); + } + if ( sysPropertiesConfig.getDevelopmentVersions() != null ) + { + config.getDevelopmentVersions().putAll( sysPropertiesConfig.getDevelopmentVersions() ); + } + } + +} Propchange: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt?rev=814798&view=auto ============================================================================== --- maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt (added) +++ maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt Mon Sep 14 19:36:27 2009 @@ -0,0 +1,58 @@ + ------ + Update POM Versions + ------ + Paul Gier + ------ + Sep 14, 2009 + +~~ 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. + +Updating POM Versions + + In some situations you may want an easy way to update the version numbers in each pom of a multi-module + project. The <<update-versions>> goal is designed to accomplish this. + + To update the version numbers in your POMs, run: + +------- +mvn release:update-versions +------- + + You will be prompted for the version number for each module of the project. If you prefer that each module + version be the same as the parent pom, you can use the option <<autoVersionSubmodules>>. + +------- +mvn release:update-versions -DautoVersionSubmodules=true +------- + + In this case you will only be prompted for the desired version number once. + + +* Specify versions on the command line. + + You may want to specify the version(s) to use on the command line. This can be useful for example if you are running + the update in non-interactive mode. The <<update-versions>> goal can use the same properties used by the prepare goal + for specifying the versions to be used. + + +----------- +mvn --batch-mode release:update-versions -DdevelopmentVersion=1.2.0-SNAPSHOT +----------- + + In this example, the local POM will be set to the version 1.2.0-SNAPSHOT + \ No newline at end of file Propchange: maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/release/trunk/maven-release-plugin/src/site/apt/examples/update-versions.apt ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/release/trunk/maven-release-plugin/src/site/site.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/site/site.xml?rev=814798&r1=814797&r2=814798&view=diff ============================================================================== --- maven/release/trunk/maven-release-plugin/src/site/site.xml (original) +++ maven/release/trunk/maven-release-plugin/src/site/site.xml Mon Sep 14 19:36:27 2009 @@ -50,6 +50,7 @@ <item name="Run Additional Goals Before Commit" href="examples/run-goals-before-commit.html"/> <item name="Create a Branch" href="examples/branch.html"/> <item name="Batch Mode Release" href="examples/non-interactive-release.html"/> + <item name="Update POM Versions" href="examples/update-versions.html"/> </menu> </body> </project>