5

Maven3.0.4の使用。

私は、組織に親会社のPOMを提供する任務を負っています。私のチームは、このPOMを使用するときに開発者が抱える質問や問題をサポートします。多くの場合、ビルドログをサポートチケットに添付します。したがって、会社のPOMで、ビルドを使用して親会社のバージョンをコンソールにエコーする必要があります。私はこれにantrunプラグインを使用しています。

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
  <execution>
    <id>echo-build-environment</id>
    <phase>validate</phase>
    <goals><goal>run</goal></goals>
    <configuration>
      <target>
        <echo level="info" message="Maven ${maven.version}" taskname="Version" />
        <echo level="info" message="Corporate POMs ${want.the.version.here}" taskname="Version" />
      ....
     </target>

秘訣は、親会社とビルドで使用されるPOMの間にPOM継承の「レベル」がいくつあるかわかりません。次のような継承構造を持つことができます。

corporate-parent
  team-parent
    application-parent
      child-module

またはこれと同じくらい簡単です:

corporate-parent
  a-simple-library

${project.version}現在の(子)プロジェクトのバージョンになるため、エコーできません。${project.parent.version}継承のレベルがいくつあるかわからないため、使用できません。コーポレートPOMバージョンにハードコーディングされたプロパティを定義しようと<corporate.pom.version>しましたが、コーポレートPOMをリリースすると、リリースプラグインはそのプロパティを更新することを認識しません(これは、依存関係バージョンではなく、単なるプロパティであり、リリースバージョンです。それを更新することを知ることができません)。

理想的には、のようなプロパティを介して特定のPOMのバージョンを直接取得できるようにしたいと思います${some.groupId.corporate-parent.version}。そのようなものはありますか?

そうでない場合、リリース中に、リリースされreleaseVersionているプロジェクトのPOMプロパティを更新する方法はありますか?

各リリースの前に、プロパティを手動で編集するというブルートフォースの方法に戻すことができました。私のチームメートはそのアプローチを高く評価しませんでした。

一見難しいとは思えないことをするために、カスタムプラグインを作成する必要がないことを願っています。

4

2 に答える 2

2

使用をやめ、代わりにGMavenmaven-antrun-pluginに切り替えました。単純なPOM階層トラバーサルで必要な情報を取得できます。

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>groovy-maven-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <id>echo-build-environment</id>
            <phase>validate</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                <![CDATA[
                def rootPom = project;
                while (rootPom.parent != null) {
                    rootPom = rootPom.parent;
                }

                project.properties.setProperty('root.pom.version', 
                                                rootPom.version);                            
                log.info("      Maven Home:  " + project.properties['maven.home']);
                log.info("       Java Home:  " + project.properties['java.home']);
                log.info("   Built By User:  " + project.properties['user.name']);
                log.info("Corp POM Version:  " + rootPom.version);
                ]]>
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>

パーツはproject.properties.setProperty計算されたプロパティを格納するため、子POMからアクセスできます。

結果のログは次のようになります。

[INFO]       Maven Home:  c:\dev\maven\apache-maven-3.0.4
[INFO]        Java Home:  c:\Program Files\Java\jdk1.7.0_13\jre
[INFO]    Built By User:  user944849
[INFO] Corp POM Version:  0.26-SNAPSHOT
于 2013-04-12T03:39:31.987 に答える
0

インストール/デプロイされたPOMでプロパティの拡張を実現するには、次の2つのプラグインを組み合わせて使用​​します。-fileおよびdeploy-filemojos、フィルター処理されたPOMをインストール/デプロイします。

このプロセスは、たとえば、リリーサープロセス中にトリガーされる可能性があります

于 2013-03-27T09:01:24.773 に答える