5

マルチモジュール プロジェクトのプロパティについて質問があります。

次の 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

誰でもこれを確認できますか?

4

1 に答える 1

0

グループ ビルドであろうとターゲット ビルドであろうと、super-pom で buildnumber-maven-plugin と maven-jar-plugin を宣言することはうまく機能するとしか言えません。

これは、このスーパーポン (すべてのプロジェクトの親) の一部です。

        <!-- Generate build number -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>buildnumber-maven-plugin</artifactId>
            <version>1.0</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>create</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <doCheck>false</doCheck>
                <doUpdate>false</doUpdate>
            </configuration>
        </plugin>
        <!-- Attach build number to all jars -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    </manifest>
                    <manifestEntries>
                        <Implementation-Build>${buildNumber}</Implementation-Build>
                        <Implementation-Build-Timestamp>${maven.build.timestamp}</Implementation-Build-Timestamp>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
于 2012-02-21T08:36:18.083 に答える