2017-02-20 4 views
1

私は私のビルドで生成jarファイルのリストを印刷するには、次のコマンドMavenのプロパティ

mvn package -DskipTests -q -pl <<my list of projects>> -am exec:exec -Dexec.executable="echo" -Dexec.args='${project.artifact.file}' 

を使用しています。これは、私のアーカイブコマンドがどのビルドを実行しているかについての明確な知識がないJenkinsにとって有益です。

しかし、私は問題に気付きました。私がテストジャーを定義していれば、このアプローチはそれを検出しません。例えば

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

テストジャーの名前を取得できるプロパティはありますか?つまり、$ {project.artifact.file}と似ています

+0

これは添付のアーティファクトです。 '$ {project.attachedArtifacts}'はそれを表示しますが、あまり読みにくくはありません。ここでのベストソリューションは、ここのようなカスタムプラグインを使用することです。http://stackoverflow.com/questions/10454181/how-to-determine-what-artifacts-are-built-from-a-maven-reactor-plan-ie-を含む。 – Tunaki

+0

実際には完璧です。出力が解析されているため、これが必要です。これを答えにしたいのですか? –

+0

なぜこれが必要ですか?これの目的は何ですか? – khmarbaise

答えて

1

テストJARはプロジェクトの主なアーチファクトではなく、アタッチされたアーチファクトであるため出力されません。添付の成果物には${project.attachedArtifacts}でアクセスできます。これはファイルを印刷するのではなく、成果物の座標を[groupId:artifactId:type:classifier:version]形式で印刷することに注意してください。

a Maven pluginまたはevent spyでより一般的にすることができます。これは、あなたが(AB)には必要がないという利点があります

<plugin> 
    <groupId>org.codehaus.gmavenplus</groupId> 
    <artifactId>gmavenplus-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <phase>install</phase> 
     <configuration> 
     <scripts> 
      <script><![CDATA[ 
      import org.apache.maven.artifact.Artifact 
      log.info(project.artifact.file.path) 
      for (Artifact artifact : project.attachedArtifacts) { 
       log.info(artifact.file.path) 
      } 
      ]]></script> 
     </scripts> 
     </configuration> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>org.codehaus.groovy</groupId> 
     <artifactId>groovy-all</artifactId> 
     <version>2.4.8</version> 
     <scope>runtime</scope> 
    </dependency> 
    </dependencies> 
</plugin> 

このためexec:execを使用します。このすべてを必要としない別の解決策は、ビルドでのGroovyスクリプトを実行することができますGMavenPlus plugin使用することですそれは完全に汎用的で、実際にはファイルパス(座標ではない)を印刷します。ログには、メインアーティファクトのパスと添付されたすべてのアーティファクトのパスが次のように出力されます。

[INFO] Using Groovy 2.4.8 to perform execute. 
[INFO] ...\test\target\test-0.0.1-SNAPSHOT.jar 
[INFO] ...\test\target\test-0.0.1-SNAPSHOT-tests.jar 
+0

ああ...私が最初にテストしたときに添付されたアーティファクトがどのように印刷されたか気付かなかった。私のシナリオでは余分なプラグインを追加するのは理想的ではありません。 –

+0

@ShaneGannon Mavenをビルドした後、Jenkinsのパイプライン内に同じGroovyコードを持つことができると思います。それは動作するはずです(私はそれをテストしませんでしたが)。 'project'(Mavenプロジェクトインスタンス)にアクセスできるようにわずかな設定があるかもしれません。 – Tunaki

+0

私はそのオプションを調べます。クラスパスにmavenを追加する必要があるようです。 –

関連する問題