5

Maven マルチモジュール プロジェクトがあり、スクリプトを使用して開発バージョンを特定の値に更新したいと考えています。アグリゲーター POM は単なるアグリゲーターであり、子はそれを継承しません。成果物はすべて他の POM ファイルから継承されるため、これは重要です。これが私の構造です

aggregator/
--projectA
--projectB

また、projectBMaven に依存していprojectAます。

最初に試しました:

mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set

aggregatorプロジェクトのバージョンのみを更新しました。

Maven リリース プロセスを実行すると、リリース ビルド後に新しい開発バージョンを使用するようにprojectBの依存関係が正しく更新されます。projectAリリース プロセスはこれを適切に処理するため、リリース プラグインを使用すると問題が解決する可能性があると考えました。

だから私は次のことを試しました:

mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions

これにより、すべてのサブプロジェクトが正しく更新されました。projectBただし、の依存バージョンは更新されませんでしたprojectA

projectBへの依存関係を含め、プロジェクト内のすべての開発バージョンを更新する簡単な方法は何projectAですか?

4

3 に答える 3

6

リリースプラグインの方がうまくいくかもしれませんが、微調整が必​​要になる場合があります

versions:set実行する pom のバージョンを更新するように設計されています...つまり、リアクターのルートです。

その慣習に従えば、それは機能します...しかし、その慣習を知る必要があります。

/project/parent/version 両方とも "偶然" に同じ値を指定した場合/project/version、バージョン プラグインは 2 つのバージョンが偶然同じであると想定し、親バージョンが更新されているときに子プロジェクトのバージョンを更新しません。updateMatchingVersionsこれは事故ではなく、子がロックステップにいる必要があるとプラグインに指示します。

プロジェクトのバージョンのみを指定/project/parent/versionして未指定のままにしておくと、継承に依存し、プラグインは子プロジェクトをバージョン変更のリストに追加します (したがって、すべてのプロジェクトを再度ループして、追加の必要な変更を確実にキャッチします)。

バージョン プラグインは、現在、すべてを 1 つのバージョンに強制するオプションを提供していません...ただし、それは良い考えかもしれません。

3 つのコマンドで必要なものを取得できます。

mvn versions:set -DnewVersion=...
cd projectA
mvn versions:set -DnewVersion=...
cd ../projectB
mvn versions:set -DnewVersion=...

これはversions:set、呼び出されたプロジェクトを参照するアグリゲーター pom が親ディレクトリに含まれている場合、リアクターを「成長」させようとするためです...

つまり、共通の親を持たないリアクターがある場合、バージョンは共通のバージョン番号が偶然のものであると想定しますが、より広いリアクターからインテントを取得します

于 2013-06-01T08:28:09.983 に答える
2
# for each module into aggregator pom
for module in $(grep "\<module\>" pom.xml | sed 's/<\/module>//g' | sed 's/.*<module>//g' | sed 's/.*\///g')
do
    # set the version of the module 
    # and update reference to this module into others modules
    mvn versions:set -DgenerateBackupPoms=false -DartifactId=$module \
        -DnewVersion=$newVersion -DupdateMatchingVersions=true
done
# set the version of the aggregator pom
mvn versions:set versions:commit -DnewVersion=$newVersion
于 2015-11-26T04:05:19.620 に答える