Maven:Maven GPG Plugin。

秦才
2023-12-01

在使用Maven GPG Plugin之前,首先需要确认命令行下的gpg是可用的,然后如下所示配置POM。

<project>
...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactid>maven-gpg-plugin</artifactid>
                <version>1.0</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
...
</project>

然后就可以使用一般的mvn命令签名并发布项目构件:

mvn clean deploy -Dgpg.passphrase-yourpassphrase

如果不提供 -Dgpg.passphrase参数,运行时就会要求输入密码。

如果有一些已经发布了但没有被签名的文件,你仍然想对其签名并发布到Maven仓库中,上述方式显然是行不通的,因为POM已经不允许被修改。好在Maven GPG Plugin为此提供了另外一个目标。例如:

gpg:sign-and-deploy-file -DpomFile=target/myapp-1.0.pom -Dfile=target/myapp-1.0.jar -Durl=http://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype_oss

在这里可以指定要签名的POM及相关文件、Maven仓库的地址和ID,Maven GPG Plugin就会帮你签名文件并部署到仓库中。

GPG签名这一步骤只有在项目发布时才显得必要,对日常的SNAPSHOT构件进行签名不仅没有多大的意义,反而会比较耗时。因此,只需要配置Maven PGP Plugin在项目发布的时候运行,那么如何判断项目发布呢?在超级POM中有一个release-profile,该Profile只有在Maven属性performRelease为true的时候才被激活,而release:perform执行的时候,就会将该属性置为true,这正是项目进行版本发布的时刻。因此,类似的,可以在settings.xml或者POM中创建如下所示的Profile。

<profiles>
    <profile>
        <id>release-sign-artifacts</id>
        <activation>
            <property>
                <name>performRelease</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactid>maven-gpg-plugin</artifactid>
                    <version>1.0</version>
                    <executions>
                        <execution>
                            <id>sign-artifacts</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

最后需要一提的是,由于一个已知的Maven Release Plugin的Bug,release:perform执行过程中签名可能会导致进程永久挂起。为了避免该情况,用户需要为Maven Release Plugin提供mavenExecutorId配置,如下所示。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactid>maven-release-plugin</artifactid>
    <version>2.0</version>
    <configuration>
        <tagBase>http://192.168.1.103/app/tags/</tagBase>
        <branchBase>https://192.168.1.103/app/branches</branchBase>
    </configuration>
</plugin>

至此,一个较为规范的自动化签名配置就完成了。当执行release:perform发布项目版本的时候,maven-gpg-plugin会被自动调用对构件进行签名。当然,这个时候你需要根据命令行提示输入私钥密码。

 类似资料:

相关阅读

相关文章

相关问答