マルチモジュール プロジェクトのプロパティについて質問があります。
次の 3 レベルのプロジェクト構造を検討してください。
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
super-pom で、デフォルト値「unknown」を取得するプロパティリビジョンを定義します。
buildnumber-maven-plugin
さらに、svn リビジョンを取得するように構成された を宣言して使用し、それをプロパティ Revision に配置します。
次に、maven-jar-plugin
そのプロパティをマニフェストに書き込むように を構成します。
module-pom では、buildnumber-maven-plugin
実際に実行されるように使用法を宣言します。
これはすべて、モジュールを直接ビルドする場合、つまり module-pom のみを実行する場合に機能します。マニフェストには、によって報告されたリビジョンが含まれてbuildnumber-maven-plugin
おり、コンソールに表示されます。
ただし、super-pom または group-pom を実行すると、リビジョンのデフォルト値がマニフェストに書き込まれbuildnumber-maven-plugin
ますが、実行されて正しいリビジョンが取得されます (実行前 にコンソールに出力されmaven-jar-plugin
ます)。
そのため、マルチモジュール プロジェクトでのプロパティの継承に関して、何かが欠けていると感じています。
ここで何が間違っているのか誰にも分かりますか? または、そのような場合にプロパティが実際にどのように処理されるかの説明を誰かに教えてもらえますか (残念ながら、まだ適切な説明を見つけることができませんでした)。
アップデート
私はいくつかの調査を行い、デバッグ出力(-X
オプション)を使用していくつかのテストを実行しました。これまでに発見したことから、私の問題は次のとおりであると想定しています。
1) pom の解析中に、pom で使用されるプロパティがそれらの値に置き換えられます。
この部分的なポンを考えてみましょう:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the property -->
<someconfig>${revision}</someconfig>
pom が評価されると、次のような状態になるようです。
<properties>
<revision>default</revision>
</properties>
...
<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>
2) 実際のプロパティ値を設定するプラグインは、validate
フェーズ中であっても後で実行されます。
したがって、プロパティ自体は新しい値に正しく設定されますが、読み取られることはありません。
3) 使用するプラグイン<someconfig>
(私の場合はmaven-jar-plugin
) が実行される<someconfig>default</someconfig>
ようになったため、まったく読み取れませんrevision
。
誰でもこれを確認できますか?