我见过:Avoid gpg signing prompt when using Maven release plugin但它是一个非常旧版本的maven,而我使用的是3.2.2,所以同样的解决方案不适用。
基本上,无论命令行中的属性组合,pom.xml中的属性或环境变量,我都无法获取maven gpg插件以避免弹出代理对话框。
出于安全原因,我们已决定不在settings.xml中以纯文本形式包含密码,因为这是一个糟糕的主意。使用加密的maven东西只需将主密钥移动到另一个纯文本文件。
软件版本:
$ gpg --version
gpg (GnuPG) 2.1.2
libgcrypt 1.6.2
$ mvn --version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T08:51:42-05:00)
我试过了
mvn -Dgpg.passphrase='lolpassphrase'
使用pom.xml中的属性从环境中获取它:
<properties>
<gpg.keyname>E7C89BBB</gpg.keyname>
<gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
</properties>
然后:
GPG_PASSPHRASE='lolpassphrase' mvn install
编辑:显然我的gpg代理人正在挡路,骗我
如果我在pom.xml属性中设置实际密码短语,GPG代理将仍然提示我:(
<properties>
<gpg.keyname>E7C89BBB</gpg.keyname>
<gpg.passphrase><![CDATA[lolcomplicatedpassphrase]]></gpg.passphrase>
</properties>
必须有一种方法可以做到这一点,而不用在纯文本中保存密码,但我无法使用正确的谷歌找到这个答案,希望你们可以帮助我。
答案 0 :(得分:9)
编辑:此解决方案仅适用于gnupg 2.1.x. 2.0.x无法识别--pinentry-mode命令行参数,它会爆炸。不幸的是,在专家中,除了第二个配置文件之外,我无法知道每个版本的gnupg都能做正确的事情。它可能需要对插件进行更新才能实现&#34;对&#34;方式。
Jeez,我只想出了这个,你必须为gpg指定一对参数,以便将它的pinentry-mode改为&#39; loopback&#39;完成此操作后,它将遵循环境变量或用户属性中的gpg.passphrase值。哇哇哇哇。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<!-- This is necessary for gpg to not try to use the pinentry programs -->
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:3)
您可以使用不使用 gpg
的插件 https://www.simplify4u.org/sign-maven-plugin/ 进行签名,因此您不需要将提供的密码短语作为环境变量进行复杂的配置。
sign-maven-plugin
只支持所有配置项作为环境变量。