相互依存プロジェクトのリリースを自動化しようとしています。これがシナリオです。A と B の 2 つのプロジェクトがあります。プロジェクト B はプロジェクト A に依存しています。自動化された手順で実行する必要がある手順は次のとおりです。
- maven-release-plugin を使用してプロジェクト A をリリースします。(私はこれを行う方法を知っています)。これが私が定義した一連の目標です: release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform
プロジェクト A の最新の SNAPSHOT バージョンをリポジトリにデプロイします。(単に deploy を使用しても機能します。ただし、以下で説明するわずかな問題があります。)
フル リリースを行う前に、プロジェクト B のプロジェクト A の SNAPSHOT 依存関係バージョンを最新のリリース バージョンに更新します。これを達成するために、プロジェクト B の POM ファイルで、prepareGoalsを次のように設定しました ( clean verify versions:use-latest-versions versions:commit )。
すべてがうまくいくようです。
今私が欲しいのは、リリースが完了したら、プロジェクト B のプロジェクト A の依存関係が、リリース中にrelease:prepareプラグインによって設定された最新の SNAPSHOT バージョンに依存することです。
私が思いついた解決策は、 release:performが実行された直後に、プロジェクト A SNAPSHOTのmaven deployを実行することでした。(プロジェクト A の新しいゴール シーケンス: release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform clean install deploy )
次に、プロジェクト B のリリース サイクルの最後に、 versions:use-next-snapshotsを実行できます。(プロジェクト B の新しい目標シーケンス: release:clean release:prepare -DcommitByProject=true -DautoVersionSubmodules=true release:perform versions:use-next-snapshots )。ここでは、プロジェクト A の依存関係のみを処理するようにバージョン プラグインを制限しています。
問題は、プロジェクト A の目標を実行するときです。Maven は、インクリメントされたバージョンではなく、古いバージョンで SNAPSHOT をデプロイします。したがって、プロジェクト A のリリース前のバージョンが1.1-SNAPSHOTだった場合。リリース後のバージョンは1.2-SNAPSHOT になりました。リリース バージョンは1.1になります。ただし、デプロイされたプロジェクト A スナップショット バージョンは1.1-SNAPSHOTであり、 1.2- SNAPSHOT ではありません。
maven-release-plugin の目標が実行された後、maven がメモリ内の pom を更新していないと推測しています。