您可以使用Checksum Maven Plugin 及其artifacts 目标。
我刚刚测试了以下示例 POM:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>create-jar-something</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>something</classifier>
</configuration>
</execution>
<execution>
<id>create-jar-else</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>else</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.ju-n.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<goals>
<goal>artifacts</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意:我正在从这个项目中创建三个人工制品:默认的一个和两个带有分类器的附加 jar。
感谢artifacts目标的简单和单一执行,我得到了以下内容作为构建的一部分(mvn clean verify):
通过附加的individualFiles 配置条目,您还可以决定是将校验和存储在单独的文件中(默认)还是附加在一个文件中,而通过individualFilesOutputDirectory 配置条目,您可以将它们的创建重定向到另一个位置,如果需要的话。
因此,这种方法可以满足您的需求,因为它会自动检测任何生成的工件并为其计算校验和。
还要注意as per documentation的多模块项目:
在多项目构建中默认不继承。
在这种情况下,您可以将上面的 sn-p 放在父/聚合器 pom 的 pluginManagement 部分中,然后在您想要的子模块中重新声明插件(但不是它的执行或版本)激活行为。
因此,在您的父/聚合器中,您可以有类似的东西:
<pluginManagement>
<plugins>
<plugin>
<groupId>net.ju-n.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<goals>
<goal>artifacts</goal>
</goals>
</execution>
</executions>
<configuration>
</configuration>
</plugin>
</plugins>
</pluginManagement>
然后在您想要启用此行为的模块中,您只需指定:
<build>
<plugins>
<plugin>
<groupId>net.ju-n.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
最后但同样重要的是:如果在 Jenkins 上构建 CI 的一部分,您还可以考虑为此行为的专用配置文件并在构建时激活它,但不作为默认构建的一部分。