测试jar文件的Maven属性
我正在使用以下命令测试jar文件的Maven属性,maven,jar,Maven,Jar,我正在使用以下命令 mvn package -DskipTests -q -pl <<my list of projects>> -am exec:exec -Dexec.executable="echo" -Dexec.args='${project.artifact.file}' mvn包-DskipTests-q-pl-am exec:exec-Dexec.executable=“echo”-Dexec.args='${project.artifact.file}
mvn package -DskipTests -q -pl <<my list of projects>> -am exec:exec -Dexec.executable="echo" -Dexec.args='${project.artifact.file}'
mvn包-DskipTests-q-pl-am exec:exec-Dexec.executable=“echo”-Dexec.args='${project.artifact.file}'
打印生成的jar文件列表。这在Jenkins上很有用,因为我的archive命令不清楚它正在运行哪个构建
但我注意到了一个问题。如果我定义了一个测试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>
org.apache.maven.plugins
maven jar插件
3.0.2
试验罐
是否有任何属性允许我检索测试jar的名称?i、 与${project.artifact.file}类似,测试JAR不会输出,因为它不是项目的主要工件,而是附加工件。您可以改为使用
${project.attachedArtifacts}
访问附加的工件。请注意,这不会以[groupId:artifactId:type:classifier:version]
格式打印文件,而是打印工件的坐标
有可能使这一点更通用,或者使用。另一个不需要所有这些的解决方案是使用,它允许在构建中执行Groovy脚本:
<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>
因为它是一个附加的工件<代码>${project.attachedArtifacts}将列出它们,但可读性不强。这里最好的解决方案是使用一个像这里这样的自定义插件。正在分析输出,因此应该这样做。你想把这个作为答案吗?你为什么需要这个?这样做的目的是什么?在我们的Jenkins管道中,我们有一个自定义脚本来归档Maven的输出。这不是我的代码,但我想看看是否可以更新它以支持测试jar。啊。。。我最初测试时没有注意到attachedArtifacts是如何打印的。在我的场景中,添加额外的插件并不理想。@ShaneGannon我认为在Maven构建之后,Jenkins管道中可以有相同的Groovy代码。它应该可以工作(尽管我没有测试它)。可能会有一个轻微的配置,以便它可以访问
项目
(Maven项目实例)。看来我需要将maven添加到类路径中。好建议@Tunaki。但我一直无法创建一个有意义的MavenProject。我用MavenXpp3Reader创建了一个。但是它缺少诸如工件、父pom等信息。您需要“运行”Maven以使其填充这些属性。我试图通过ProjectBuildingRequest执行此操作,但在解析org.springframework.boot依赖项时,它给出了一个IllegalArgumentException。到目前为止的复杂性让我觉得这种方法对我来说不太合适。这两种解决方案都在@Shane中讨论过,我认为您不需要这样做,Jenkins已经知道MavenProject,使用def project=currentBuild.getParent().getModules().toArray()[0]
,或者。