私の意見では、この質問に答えるには、プロジェクトのライフサイクルとバージョン管理の観点から考える必要があります。つまり、親pomには独自のライフサイクルがあります。つまり、他のモジュールとは別にリリースできますか?
答えが「はい」の場合(そして、これは質問またはコメントで言及されているほとんどのプロジェクトの場合です)、親pomは、VCSおよびMavenの観点から独自のモジュールを必要とし、最終的にはVCSレベルで次のようなもので:
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
`-- projectA
|-- branches
|-- tags
`-- trunk
|-- module1
| `-- pom.xml
|-- moduleN
| `-- pom.xml
`-- pom.xml
これはチェックアウトを少し苦痛にし、それに対処する一般的な方法はを使用することsvn:externals
です。たとえば、trunks
ディレクトリを追加します。
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
次のように定義されています:
parent-pom http://host/svn/parent-pom/trunk
projectA http://host/svn/projectA/trunk
のチェックアウトはtrunks
、次のローカル構造になります(パターン#2)。
root/
parent-pom/
pom.xml
projectA/
オプションpom.xml
で、trunks
ディレクトリにを追加することもできます。
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
`-- pom.xml
これpom.xml
は一種の「偽の」pomです。リリースされることはありません。このファイルはリリースされることはないため、実際のバージョンは含まれず、モジュールのリストのみが含まれます。このファイルを使用すると、チェックアウトの結果、次のような構造になります(パターン#3)。
root/
parent-pom/
pom.xml
projectA/
pom.xml
この「ハック」により、チェックアウト後にrootからreactorビルドを起動して、物事をさらに便利にすることができます。実際、これは私が大規模なビルドのためにMavenプロジェクトとVCSリポジトリをセットアップする方法です。それは機能するだけで、十分に拡張でき、必要なすべての柔軟性を提供します。
答えが「いいえ」の場合(最初の質問に戻ります)、パターン1を使用できる(おそらく、機能する可能性のある最も単純なことを行う)ことができます。
さて、ボーナスの質問について:
- ソースコントロール、デプロイメントディレクトリ、一般的なプラグインなどのように、さまざまな共有構成を定義するのに最適な場所はどこですか(私は親を想定していますが、これにしばしば噛まれて、各プロジェクトではなく、各プロジェクトに行き着きました一般的なもの)。
正直なところ、ここで一般的な答えを出さない方法がわかりません(たとえば、「物事を相互に関連付けることが理にかなっていると思うレベルを使用する」など)。とにかく、子pomは常に継承された設定をオーバーライドできます。
- maven-releaseプラグイン、hudson、nexusは、マルチプロジェクトのセットアップ方法にどのように対処しますか(おそらく、巨大な質問です。
私が使用している設定は問題なく機能します。
実際には、maven-release-pluginがパターン#1をどのように処理するのか(特に<parent>
、リリース時にSNAPSHOT依存関係を持つことができないため、このセクションでは)と思います。これは鶏肉または卵の問題のように聞こえますが、それが機能し、テストするのが面倒だったかどうか思い出せません。