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>