测试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]
,或者。