手动地对Maven构件进行签名并将这些签名部署到Maven仓库中是一件耗时的体力活。而使用Maven GPG Plugin只需要提供几行简单的配置,它就能够帮我们自动完成签名这一工作。
在使用Maven GPG Plugin之前,首先需要确认命令行下的gpg是可用的,然后如代码清单13-5所示配置POM。
代码清单13-5 配置maven-gpg-plugin为项目提供签名
然后就可以使用一般的mvn命令签名并发布项目构件:
如果不提供-Dgpg.passphrase参数,运行时就会要求输入密码。
如果有一些已经发布了但没有被签名的文件,你仍然想对其签名并发布到Maven仓库中,上述方式显然是行不通的,因为POM已经不允许被修改。好在Maven GPG Plugin为此提供了另外一个目标。例如:
在这里可以指定要签名的POM及相关文件、Maven仓库的地址和ID,Maven GPG Plugin就会帮你签名文件并部署到仓库中。
读者可以想到,GPG签名这一步骤只有在项目发布时才显得必要,对日常的SNAPSHOT构件进行签名不仅没有多大的意义,反而会比较耗时。因此,只需要配置Maven PGP Plugin在项目发布的时候运行,那么如何判断项目发布呢?回顾代码清单13-3,在超级POM中有一个release-profile,该Profile只有在Maven属性performRelease为true的时候才被激活,而release:perform执行的时候,就会将该属性置为true,这正是项目进行版本发布的时刻。因此,类似地,可以在settings.xml或者POM中创建如代码清单13-6所示Profile。
代码清单13-6 配置自动激活的Profile对项目进行签名
最后需要一提的是,由于一个已知的Maven Release Plugin的Bug,release:perform执行过程中签名可能会导致进程永久挂起。为了避免该情况,用户需要为Maven Release Plugin提供mavenExecutorId配置,如代码清单13-7所示。
代码清单13-7 配置maven-release-plugin避免签名时永久挂起
至此,一个较为规范的自动化签名配置就完成了。当执行release:perform发布项目版本的时候,maven-gpg-plugin会被自动调用对构件进行签名。当然,这个时候你需要根据命令行提示输入私钥密码。