测试jar文件的Maven属性

时间:2017-02-20 13:14:08

标签: maven jar

我正在使用以下命令

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

打印我的构建生成的jar文件列表。这在Jenkins上非常有用,我的归档命令没有明确知道它正在运行的构建。

但我注意到了一个问题。如果我已经定义了一个测试jar,这种方法就不会检测到它。 e.g。

<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}

1 个答案:

答案 0 :(得分:1)

测试JAR不输出,因为它不是项目的主要工件,而是附加的工件。您可以使用${project.attachedArtifacts}访问附加的工件。请注意,这不会以[groupId:artifactId:type:classifier:version]格式打印文件,而是打印工件的坐标。

可以通过a Maven pluginevent spy使其更通用。另一个不需要这一切的解决方案是使用允许在构建中执行Groovy脚本的GMavenPlus plugin

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

这样做的好处是你不需要(ab)使用exec:exec,这是完全通用的,实际上是打印文件路径(而不是坐标)。它将在日志中输出主工件的路径以及所有附加的工件,如下所示:

[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