讀古今文學網 > Maven實戰 > 13.6.2 Maven GPG Plugin >

13.6.2 Maven GPG Plugin

手動地對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會被自動調用對構件進行簽名。當然,這個時候你需要根據命令行提示輸入私鑰密碼。