Maven:マルチモジュールプロジェクトとバージョン化
-
26-10-2019 - |
質問
Mavenを使用したソフトウェアバージョンおよびマルチモジュールプロジェクトのベストプラクティスは何ですか?
つまり、Mavenを使用してマルチモジュールプロジェクトを作成するとき、バージョンの最良のアプローチは何ですか?すべてのモジュールに単一のバージョンを使用するには(トッププロジェクトで定義されています)?各モジュールにバージョンを使用するには(各モジュールのPOMで定義されています)?私が欠けている別のアプローチはありますか?各アプローチの長所と短所は何ですか?
一般に、異なるモジュールは一緒にリリースされていますか(おそらく同じバージョン番号を共有する可能性があります)?
ありがとう
解決
正直なところ、それはあなたが何をしたいかに依存します。マルチモジュールプロジェクトは複数の理由で作成されています。その1つは、すべてのモジュールではなく変更されたものを展開するだけであることです。
このように考えてみてください:非マルチモジュールプロジェクトがあり、サービスレイヤーの1つの行を変更する必要がある場合は、プロジェクト全体を再構築し、すべてのコードを再び展開する必要があります...サービスレイヤーが変更されます。
マルチモジュールプロジェクトを使用すると、プロジェクトを再生し、変更されたもののみを展開できます...サービス。これによりリスクが軽減され、サービスモジュールのみが変更されることが保証されます。
また、ここにリストしていないマルチモジュールプロジェクトを使用することには多くの利点がありますが、モジュールのバージョン番号を同期させないことには確かに大きな利点があります。
プロジェクトをビルドするときは、ビルド用にすべての互換性のあるジャーを一緒に保持するリポジトリに展開することを検討してください(各ビルドは、親のないPOMバージョン番号を備えた新しいフォルダーを作成します)。そうすれば、どの瓶が互換性があるかについてのドキュメントを保持する必要はありません...それらはすべてビルド番号と一緒に展開されています。
他のヒント
私は自分自身とこの正確な問題の解決策を探していました バージョン-Maven-Plugin まさに私が必要としていたものでした。 SCMシステムと通信するリリースプラグインが好きではありません。バージョンプラグインは、必要なことだけを実行します。プロジェクトのすべてのPOMで新しいバージョン番号を設定します。
mvn versions:set -DnewVersion=2.0.0
それで コミット、タグ、公式ビルドサーバービルドを進めることができます...
編集:
バージョンプラグインは、Maven Multi-Moduleプロジェクトの編成方法によって異なります。その結果、多くの場合、複雑なマルチモジュールプロジェクトですべてのPOMファイルを更新しないことがよくあります。私は、SEDがより確実に仕事をしていることを発見したことがわかりました:
sed -i 's/1.0.0-SNAPSHOT/1.0.0-RC1/g' `find . -name 'pom.xml'`
通常、さまざまなモジュールが単一の全体の一部であると考えているため、マルチモジュールプロジェクトを作成します。たぶん、クライアントピース、コントローラーピース、サービスピース。または多分サービスを備えたUI。
いずれにせよ、さまざまなモジュールがロックステップで移動するバージョン番号を使用することは理にかなっています。しかし、Mavenはそうではありません それを強制します 原則として。
あなたの質問について
異なるモジュールが一緒にリリースされていますか(おそらく同じバージョン番号を共有する可能性があります)
そうだと思います。それがマルチモジュールプロジェクトを持つ理由の1つです。それ以外の場合は、モジュールを独立したプロジェクトとして使用できます。
もちろん、これはエッジのケースと例外があるようなものです;-)