我正在使用以下命令
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}
答案 0 :(得分:1)
测试JAR不输出,因为它不是项目的主要工件,而是附加的工件。您可以使用${project.attachedArtifacts}
访问附加的工件。请注意,这不会以[groupId:artifactId:type:classifier:version]
格式打印文件,而是打印工件的坐标。
可以通过a Maven plugin或event 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