Changing the project version
The set
goal can be used to update the version of the current module. It will automatically climb up local
directories to find the aggregation root. It will automatically update explicitly referenced dependencies.
You specify the version to update to via the newVersion property, for example
mvn versions:set -DnewVersion=1.0.3-SNAPSHOT
Here is a real-life example:
svn co http://svn.apache.org/repos/asf/maven/enforcer/trunk/@778424 enforcer
A enforcer/maven-enforcer-plugin
[...]
A enforcer/enforcer-rules/pom.xml
U enforcer
Checked out revision 778424.
mvn versions:set -DnewVersion=2.0.0-SNAPSHOT -f enforcer/pom.xml
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] Enforcer
[INFO] Enforcer API
[INFO] Enforcer Rules
[INFO] Maven Enforcer Plugin
[INFO] ------------------------------------------------------------------------
[INFO] Building Enforcer
[INFO] task-segment: [org.codehaus.mojo:versions-maven-plugin:1.0-beta-1:set] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [versions:set]
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: ./enforcer
[INFO] Processing org.apache.maven.enforcer:enforcer
[INFO] Updating project org.apache.maven.enforcer:enforcer
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.apache.maven.enforcer:enforcer-api
[INFO] Updating parent org.apache.maven.enforcer:enforcer
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO] Updating project org.apache.maven.enforcer:enforcer-api
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.apache.maven.enforcer:enforcer-rules
[INFO] Updating parent org.apache.maven.enforcer:enforcer
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO] Updating project org.apache.maven.enforcer:enforcer-rules
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.apache.maven.plugins:maven-enforcer-plugin
[INFO] Updating parent org.apache.maven.enforcer:enforcer
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO] Updating project org.apache.maven.plugins:maven-enforcer-plugin
[INFO] from version 1.0-beta-2-SNAPSHOT to 2.0.0-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Mon May 25 15:30:00 IST 2009
[INFO] Final Memory: 22M/355M
[INFO] ------------------------------------------------------------------------
To illustrate how dependencies version updating and aggregator root detection works reactor, we need to edit the
dependencyManagement section of the root pom.xml
to reference the version explicitly, as opposed to
via a property.
Change:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
To
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
<version>2.0.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Now if we run
mvn versions:set -DnewVersion=2.1.0-SNAPSHOT -f enforcer/enforcer-api/pom.xml
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Enforcer API
[INFO] task-segment: [org.codehaus.mojo:versions-maven-plugin:1.0-beta-1:set] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [versions:set]
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /home/connollys/src/enforcer/../enforcer
[INFO] Processing org.apache.maven.enforcer:enforcer-api
[INFO] Updating project org.apache.maven.enforcer:enforcer-api
[INFO] from version 2.0.0-SNAPSHOT to 2.1.0-SNAPSHOT
[INFO]
[INFO] Processing org.apache.maven.enforcer:enforcer
[INFO] Updating dependency org.apache.maven.enforcer:enforcer-api
[INFO] from version 2.0.0-SNAPSHOT to 2.1.0-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Mon May 25 15:41:54 IST 2009
[INFO] Final Memory: 22M/350M
[INFO] ------------------------------------------------------------------------
In this case it has updated the version of enforcer-api, it has found that enforcer-api is part of an aggregator build in the local filesystem, and it has updated all references to enforcer-api in the aggregator build to reference the new version.
Widening the scope of the change
You can increase or change the scope of the change by specifying the groupId
or artifactId
or
oldVersion
on the command line directly. These can also support wildcards to help match multiple modules
which will become origins of change.
mvn versions:set -DgroupId=org.apache.maven.* -DartifactId=* -DoldVersion=2.* -DnewVersion=2.1.0-SNAPSHOT