为所有 Maven 工件创建校验和

Create a checksum for all maven artifacts

我正在尝试为我的 Maven 构建中当前的所有工件创建一个 SHA-1 校验和,并将这些校验和写入一个文件。目前我正在研究使用具有内置校验和生成器的 maven-install-plugin。

https://maven.apache.org/plugins/maven-install-plugin/examples/installing-checksums.html

问题是这个解决方案似乎只适用于一个工件,而不是我构建中的所有工件。我也不能在构建时指定所有工件,我需要一个包含所有工件的解决方案。

其他信息:我将 Jenkins 用作构建工具,因此如果有 Jenkins 解决方案,我也可以接受。我自己还没有找到一个。

您可以使用 Checksum Maven Plugin and its 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 配置条目您可以如果需要,将他们的创作重定向到另一个位置。

因此,这种方法可以满足您的需要,因为它会自动检测任何生成的工件并为其计算校验和。

另请注意 multi-modules 项目 as per documentation:

Is NOT inherited by default in multi-project builds.

在这种情况下,您可以将上面的代码片段放在 parent/aggregator pom 的 pluginManagement 部分,而只是 re-declare 插件(但不是它的执行或它的版本)在您要激活行为的子模块。

因此,在您的 parent/aggregator 中,您可以有类似的内容:

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

最后但同样重要的是:如果 CI 构建在 Jenkins 上,您还可以考虑为此行为创建一个专用配置文件并在构建时激活它,但不作为默认构建的一部分。