親プロジェクトとサブプロジェクトであるいくつかのモジュールを使用した従来のMavenセットアップがあります。私がそうすると、プロジェクトごとに(深さ優先)までmvn deploy
のライフサイクル全体(を含む)が実行されます。プロジェクトのいずれかがビルドに失敗した場合、サブプロジェクトのデプロイは避けたいと思います。言い換えれば、私は親プロジェクト全体の「オールオアナッシング」になりたいのです。これを達成する方法はありますか?test
deploy
deploy
2 に答える
Maven自体はこれを(まだ)行うことができません。現在、ビルドプロセスは、各モジュールのすべてのターゲットを個別に実行します。ターゲットが全体像を把握できるようにする計画がありますが、それはおそらくMaven4の場合です。
それまでの間、小さなシェルスクリプトを使用できます。
mvn clean install && mvn deploy -DskipTests=true
最初の実行ですべてが構築されます。2回目の実行ではあまり効果がないため(すべてのコードが既にコンパイルされており、長いテストはスキップされます)、かなり高速です。
私のスクリプトは既存の要素もdistributionManagement
会社のキャッシュの要素に置き換えるため、実際にはこのアプローチを好みます。つまり、元のPOMに変更を加えることなく、会社のプロジェクトを展開できます。スクリプトは次のとおりです。
#!/bin/bash
if [[ ! -e pom.xml ]]; then
echo "Missing pom.xml" 1>&2
exit 1
fi
sed \
-e '/<distributionManagement>/,/<\/distributionManagement>/d' \
-e '/<\/project/d' \
pom.xml > pom-deploy.xml || exit 1
cat >> pom-deploy.xml <<EOF
<!-- ADDED BY $0 -->
<distributionManagement>
... whatever you need ...
</distributionManagement>
</project>
EOF
mvn -f pom-deploy.xml clean install && \
mvn -f pom-deploy.xml deploy -DskipTests=true && \
rm pom-deploy.xml
exit 0
リモートリポジトリがSonatypeNexusProインスタンスの場合、Nexus Proの「ステージング」機能により、リポジトリへのアトミックパブリッシングが可能になります。
Jenkinsを使用している場合は、すべてのアーティファクトをビルド後(またはビルド後)のアクションとしてデプロイする遅延デプロイメントプラグインがあります(どのリポジトリマネージャーを使用してもかまいません)
最後に、mrm-maven-plugin @ codehausの私の中長期的な目標の1つは、展開のローカルステージングを許可して、次のようなことができるようにすることです。
mvn mrm:catch-deploy deploy mrm:push-deploy
しかし、その最後のものはまだ書かれていません!