You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by pg...@apache.org on 2009/09/14 21:36:28 UTC
svn commit: r814798 - in /maven/release/trunk:
maven-release-manager/src/main/java/org/apache/maven/shared/release/
maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/
maven-release-manager/src/main/resources/META-INF/plexus/ mav...
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:brett@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>