Mavenで、プロジェクトのバージョン自体はpom.xmlのproject.versionに書くわけですが、このバージョン番号を
更新する時ってどうするんでしょう?
特に、マルチプロジェクト構成にしたりしていると、ひとつひとつを変えていくのは面倒ですよね。
よく見かける情報ではMaven Release Pluginを使うといい、みたいなのを見るのですが、バージョン管理システムとの
連動だったりがあって若干敷居の高さを感じます。
Maven Release plugin – Introduction
もうちょっとシンプルにバージョンだけを変更できる手段はないでしょうか?
で、調べてみると、Versions Maven Pluginでできそうな感じです。
Versions Maven Plugin – Introduction
Versions Maven Pluginは、以前にも取り上げたことがあって、この時はプロジェクトが依存しているライブラリの
最新バージョンを確認したり、依存するバージョンを更新できたり、みたいなことで使いました。
Mavenでの依存ライブラリの最新バージョンを表示、更新したりできるVersions Maven Plugin - CLOVER
で、今回の用途の場合は「versions:set」を使えばいいみたいです。
Versions Maven Plugin – versions:set
試してみましょう。
プロジェクトのバージョンを更新してみる
まず、対象として次のようなマルチプロジェクト構成のMavenプロジェクトがあるものとします。
$ find test-project -name pom.xml test-project/pom.xml test-project/sub-project1/pom.xml test-project/sub-project2/pom.xml
現在のバージョンを見てみましょう。
$ cd test-project
現時点で、プロジェクトのバージョンは「0.1」とします。
$ mvn clean [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] test-project [INFO] sub-project1 [INFO] sub-project2 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building test-project 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ test-project --- [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project1 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sub-project1 --- [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project2 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sub-project2 --- [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] test-project ....................................... SUCCESS [ 0.572 s] [INFO] sub-project1 ....................................... SUCCESS [ 0.002 s] [INFO] sub-project2 ....................................... SUCCESS [ 0.002 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.690 s [INFO] Finished at: 2017-06-13T23:40:04+09:00 [INFO] Final Memory: 6M/201M [INFO] ------------------------------------------------------------------------
では、これを0.2に変えてみます。
「mvn versions:set」を実行。
$ mvn versions:set
対話形式でバージョンを聞かれるので、ここでは「0.2」と入力してみます。
[INFO] --- versions-maven-plugin:2.3:set (default-cli) @ test-project --- Enter the new version to set 0.1: : 0.2
すると、各プロジェクトのバージョンが「0.2」に更新されます。
[INFO] Searching for local aggregator root... [INFO] Local aggregation root: /path/to/test-project [INFO] Processing change of org.littlewings.test:test-project:0.1 -> 0.2 [INFO] Processing org.littlewings.test:test-project [INFO] Updating project org.littlewings.test:test-project [INFO] from version 0.1 to 0.2 [INFO] [INFO] Processing org.littlewings.test:sub-project1 [INFO] Updating parent org.littlewings.test:test-project [INFO] from version 0.1 to 0.2 [INFO] [INFO] Processing org.littlewings.test:sub-project2 [INFO] Updating parent org.littlewings.test:test-project [INFO] from version 0.1 to 0.2 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] test-project ....................................... SUCCESS [ 42.370 s] [INFO] sub-project1 ....................................... SKIPPED [INFO] sub-project2 ....................................... SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 43.047 s [INFO] Finished at: 2017-06-13T23:41:38+09:00 [INFO] Final Memory: 18M/285M [INFO] ------------------------------------------------------------------------
各サブプロジェクトも含め、pom.xmlが更新されます。
ちなみに、「-DnewVersion」で対話形式でなく、一気に変更することもできます。
$ mvn versions:set -DnewVersion=0.2
変更を確定する、もしくは破棄する
「versions:set」でバージョンを変更できたと思いきや、まだ確定はできていません。依存ライブラリのバージョンを変更した時も
そうだったのですが、「pom.xml.versionsBackup」というバージョン変更前のファイルができています。
$ find ./ -type f | grep pom.xml ./pom.xml ./sub-project1/pom.xml ./sub-project1/pom.xml.versionsBackup ./sub-project2/pom.xml ./sub-project2/pom.xml.versionsBackup ./pom.xml.versionsBackup
この「pom.xml.versionsBackup」には、前のバージョン(今回の例では「0.1」)の状態のpom.xmlのバックアップになっています。
変更を確定するには、「versions:commit」を行います。
$ mvn versions:commit
Versions Maven Plugin – versions:commit
これで、変更が確定します。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] test-project [INFO] sub-project1 [INFO] sub-project2 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building test-project 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:commit (default-cli) @ test-project --- [INFO] Accepting all changes to /path/to/test-project/pom.xml [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project1 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:commit (default-cli) @ sub-project1 --- [INFO] Accepting all changes to /path/to/test-project/sub-project1/pom.xml [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project2 0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:commit (default-cli) @ sub-project2 --- [INFO] Accepting all changes to /path/to/test-project/sub-project2/pom.xml [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] test-project ....................................... SUCCESS [ 1.444 s] [INFO] sub-project1 ....................................... SUCCESS [ 0.196 s] [INFO] sub-project2 ....................................... SUCCESS [ 0.004 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.203 s [INFO] Finished at: 2017-06-13T23:49:55+09:00 [INFO] Final Memory: 17M/285M [INFO] ------------------------------------------------------------------------
「pom.xml.versionsBackup」ファイルは、なくなります。
$ find ./ -type f | grep pom.xml ./pom.xml ./sub-project1/pom.xml ./sub-project2/pom.xml
反対に、変更を破棄するには「versions:revert」を実行します。
$ mvn versions:revert
Versions Maven Plugin – versions:revert
これで、変更前の状態に戻ります。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] test-project [INFO] sub-project1 [INFO] sub-project2 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building test-project 0.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:revert (default-cli) @ test-project --- [INFO] Restoring /path/to/test-project/pom.xml from /path/to/test-project/pom.xml.versionsBackup [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project1 0.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:revert (default-cli) @ sub-project1 --- [INFO] Restoring /path/to/test-project/sub-project1/pom.xml from /path/to/test-project/sub-project1/pom.xml.versionsBackup [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building sub-project2 0.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.3:revert (default-cli) @ sub-project2 --- [INFO] Restoring /path/to/test-project/sub-project2/pom.xml from /path/tor/test-project/sub-project2/pom.xml.versionsBackup [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] test-project ....................................... SUCCESS [ 0.811 s] [INFO] sub-project1 ....................................... SUCCESS [ 0.053 s] [INFO] sub-project2 ....................................... SUCCESS [ 0.005 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.363 s [INFO] Finished at: 2017-06-14T00:00:36+09:00 [INFO] Final Memory: 17M/285M [INFO] ------------------------------------------------------------------------
使いどころはピンポイントかもしれませんが、知っておくと便利…かもしれませんね。