backend
とfrontend
という2つのトップレベルのMavenプロジェクトがあり、それぞれ独自のペースでバージョンを進めています。それぞれに複数のモジュールがあるため、親/集約POMのdependencyManagement
セクションで依存関係バージョンを定義し、バージョン番号のプロパティを使用します。
frontend
のバージョン番号を使用して、できれば任意にプロパティをクリーンに更新したいのですが、一致するライブのアップストリームバージョンが必要な場合でも対応できます。 versions:update-property
を使用してみましたが、その目標は完全に機能しないようです。実際に一致するアップストリームバージョンがあるかどうかに関係なく、次のデバッグ出力が表示されます。
$ mvn versions:update-property -Dproperty=frontend.version -DnewVersion=0.13.2 -DautoLinkItems=false -X
...
[DEBUG] Searching for properties associated with builders
[DEBUG] Property ${frontend.version}
[DEBUG] Property ${frontend.version}: Looks like this property is not associated with any dependency...
[DEBUG] Property ${frontend.version}: Set of valid available versions is [0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.10.0, 0.10.1, 0.11.0, 0.12.0, 0.13.0, 0.13.1, 0.13.2, 0.13.3]
[DEBUG] Property ${frontend.version}: Restricting results to 0.13.2
[DEBUG] Property ${frontend.version}: Current winner is: null
[DEBUG] Property ${frontend.version}: Searching reactor for a valid version...
[DEBUG] Property ${frontend.version}: Set of valid available versions from the reactor is []
[INFO] Property ${frontend.version}: Leaving unchanged as 0.13.1
[INFO] ------------------------------------------------------------------------
-DautoLinkItems=false
を指定しましたが、これは効果がないようです。 versions-maven-plugin
は引き続き、一致する依存関係についてすべてのPOMをスキャンし、手を上げて終了します。プラグイン設定でそのプロパティのsearchReactor
をfalse
に設定しようとしました。プラグインは、(1)依存関係を無視するように明示的に指定した場合でも、依存関係を誤ってスキャンし、(2)明示的な特定の一致を除外するようです。
バージョン番号を検証せずにversions-maven-plugin
に強制的に実行させるか、別の目標を使用して、Mavenプロパティエントリを特定の値に書き換える簡単な方法はありますか? XMLを理解しないsed
のようなツールは避けたいと思いますが(同様の質問で推奨されているように)、単純なXPath操作で問題ありません。
Mavenプロパティエントリを特定の値に書き換える簡単な方法はありますか
バージョン2.5
使用できますset-property
( ドキュメント ):
mvn versions:set-property -Dproperty=your.property -DnewVersion=arbitrary_value
文書化されているように、set-property
ゴールは、指定した値に対して「健全性チェック」を実行しないため、常に機能するはずですが、注意して使用する必要があります。
NewVersionパラメータのドキュメントが不適切です(このプラグインのほとんどがそうです)。統合テストを確認すると、単純なバージョン番号ではなく Mavenバージョン範囲 が必要です。また、値を提供することはできません-Mavenが解決できる有効な値でなければなりません。 constrainRange
と呼ばれる場合、パラメーターはより良いでしょう
将来的には、これを試してください:
mvn versions:update-property -Dproperty=frontend.version -DnewVersion=[0.13.2]
スナップショットに更新する必要がある場合は、プロパティallowSnapshots
をtrueに設定してください。
mvn versions:update-property -Dproperty=frontend.version -DnewVersion=[0.13.2] -DallowSnapshots=true
既存のPOMのプロパティを更新する方法:
maven-resource-plugin でフィルタリングを使用してみてください:
利点:
短所:
ビルド時間に適切な方法:
ビルドパラメーターによって任意のプロパティを指定できます。
たとえば、pom.xmlには次のようなプロパティがあります。
<properties>
<build.date>TODAY</build.date>
</properties>
ビルド中に変更するには、単にパラメーターを使用します。
mvn compile -Dbuild.date=10.10.2010
バージョンでも機能すると確信しています。また、最上位プロジェクトのプロパティは子に継承されます。
私は同じ問題を抱えていて、ファイル内のpomプロパティを変更するものは何も見つかりませんでした。私はあなたが提案したようにsedを使用することになりました:
cat pom.xml | sed -e "s%<util.version>0.0.1-SNAPSHOT</util.version>%<util.version>$bamboo_planRepository_branch</util.version>%" > pom.xml.transformed;
rm pom.xml;
mv pom.xml.transformed pom.xml;
以下はバージョンに適用されます:update-propertiesゴール。同じことがversion:update-propertyにも適用されると思います。
デフォルトの目標は、対応するプロパティ定義と依存関係宣言が同じPOMファイルにある場合にのみ機能します。
たとえば、プロパティがプロジェクトPOMで定義されているが、モジュールPOMの依存関係宣言で使用されている場合、バージョンプラグインによる自動更新のためにプロジェクトPOMで次の構成が必要です。
<properties>
<my.version>3.7.11</my.version>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<properties>
<property>
<name>my.version</name>
<dependencies>
<dependency>
<groupId>com.acme.test</groupId>
<artifactId>demo-arti</artifactId>
</dependency>
</dependencies>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
プラグイン構成は、Versions mavenプラグインがPOMに対して実行され、プロパティを更新しようとすると実行されます。この構成は、現在のPOMにない場合でも、「POMのどこかで」指定された依存関係にプロパティが使用されることをバージョンプラグインに伝えます。
Pom.xmlでプロパティを定義するときに、update-propertyが機能するようにするには、間隔として宣言する必要があります。
つまり、frontend.versionは次のように定義されていることを確認します。
<frontend.version>0.13.1</frontend.version>
次に、-DnewVersion = 0.13.2を設定すると、プラグインは値を有効な値として認識しません。間隔として定義する代わりに、プラグインが機能します。
<frontend.version>[0.13.0,0.13.2]</frontend.version>
私のテストの1つで、次の結果が得られます。
mvn versions:update-property -Dproperty=absis.version -DnewVersion=[2.20.4] -X
[DEBUG] Property ${test.version}: Set of valid available versions is [2.19.0-RC-REVISION-1, 2.19.0-RC0.1, 2.19.0-RC0.2, 2.19.0-RC0.3, 2.19.0-RC0.4, 2.19.0-RC0.5, 2.19.0-RC0.6, 2.19.0-RC0.7, 2.19.0-RC1, 2.19.0-RC2, 2.19.0-RC3, 2.19.0, 2.19.0-revision, 2.19.0-revision2, 2.19.0.2, 2.19.1, 2.19.2, 2.19.3, 2.19.4, 2.20.0-RC0, 2.20.0-RC0.1, 2.20.0-RC1, 2.20.0-RC2, 2.20.0-RC3, 2.20.0, 2.20.0-PRUEBA-VERSION, 2.20.0-PRUEBA-VERSION-2, 2.20.0-PRUEBA-VERSION-3, 2.20.0i-RC1, 2.20.0i-RC1.1, 2.20.0i, 2.20.0i.2, 2.20.1, 2.20.2, 2.20.4, 2.20.5, 2.20.5-LT, 2.20.5.1, 2.20.6i-RC1, 2.21.0-RCtest1, 2.21.0-RCtest2]
[DEBUG] Property ${test.version}: Restricting results to [2.20.4,2.20.4]
[DEBUG] Property ${test.version}: Current winner is: 2.20.4
[DEBUG] Property ${test.version}: Searching reactor for a valid version...
[DEBUG] Property ${test.version}: Set of valid available versions from the reactor is []
[INFO] Updated ${test.version} from [2.19.0,2.21.0-SNAPSHOT] to 2.20.4
購入すると、プロパティ値を範囲に変更する必要があります。
残念ながら、pomsの定義では範囲を使用できません。