この投稿の長さについてお詫び申し上げますが、写真を提示せずに簡潔にするのに苦労しました。私は最近、Maven3.0マルチモジュールプロジェクトのビルドマスターの仕事を引き継ぎました。問題は、プロジェクト/モジュールの構造が災害であるということです。現在ソース管理(RTCを使用)に保存されている方法からモジュールのpom構造まで、毎回完全なビルドサイクルを完了させようとして、髪の毛を引き裂いています。
プロジェクト階層が進むにつれて、すべてのモジュールは「フラット」に保存されます。つまり、すべてが同じレベルにあります。私は親pomを持っており、すべてのモジュールは親に依存しています。ただし、親は他のすべてのモジュールと同じレベルにあります。
元:
c:\dev\MyEarProject
+ parent-pom
- pom.xml
+ module1
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module2
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module3
- pom.xml (depends on parent-pom)
- src
- main
- ...
親pomは、プロジェクトのビルドに必要なすべてのモジュールと、さまざまなサブモジュール全体で使用されるアーティファクトのバージョン番号の一連のプロパティを定義します。
<modules>
<module>../module1</module>
<module>../module2</module>
<module>../module3</module>
</modules>
<properties>
<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
<slf4j.version>1.6.4</slf4j.version>
<repositoryAddress>${snapshots.repo.url}</repositoryAddress>
<my.hibernate-module.dao.impl>1.2.3</my.hibernate-module.dao.impl>
<my.hibernate-module.dao.api>1.2.3</my.hibernate-module.dao.api>
</properties>
次に、各モジュールのpomは、pomのアーティファクト番号を介して親pomに依存します。
<parent>
<groupId>com.cws.cs.lendingsimulationservice</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.6</version>
</parent>
さらに混乱させるために、実際のアーティファクト名は(モジュールに応じて)モジュールパスと一致する場合と一致しない場合があります。たとえば、module1はパスに配置されc:\dev\MyEarProject\module1
ていても、アーティファクト名はhibernate-module
です。ただし、RTCでの保存方法により、module1
チェックアウト時にディレクトリが呼び出されます。
もちろん、すべてを構築する最も簡単な方法は、にアクセスしc:\dev\MyEarProject\parent-pom\
て実行することmvn clean deploy
です。SNAPSHOTリポジトリでは同じアーティファクトバージョンの複数の展開が可能であるため、これはSNAPSHOTモードで正常に機能します。しかし、リリースモードでは、これは失敗します。
この構造は私にとって2つの問題を引き起こしています。
- 親のプロパティにバージョンを変更する必要があるたびに、親-pomのバージョン番号、すべての子モジュールの親pomのバージョン、およびすべての子モジュールのバージョン自体を更新する必要があります(親が変更されたため)。
- リリースサイクルをデプロイする必要があるときはいつでも、モジュールの1つが最後のサイクル以降変更されておらず、その結果、同じリポジトリに再デプロイできない場合、mvnはエラーをスローします(リポジトリは既存のアーティファクトの上書きを許可しません)
したがって、これらの問題を回避するために、このプロジェクトを再構築するための最良の方法を探しています。親pomの場合、代わりに相対パスを使用して親を指すことができます。ただし、モジュールの「フラットな」構造を考えると、これは推奨されるアプローチですか(つまり、親pomの相対パスは../parent-pom/pom.xmlになります-私には少し奇妙に思えます)?さらに、親のバージョン管理がモジュールから独立していることを考えると、相対パスを使用するだけでなく、追加の混乱への扉が開かれます(つまり、親pomのどのバージョンがどのバージョンに関連付けられているかを知る方法はありませんサブモジュールの)。
次に、発生しているデプロイエラーに遭遇することなく、耳全体を構築するにはどうすればよいですか?アーティファクトはすでにリポジトリに存在するため、再構築して再デプロイする必要はありません。--projectsを使ってみましたが、モジュールの数が多いため、管理が非常に難しくなります。