如何让maven gpg插件使用来自环境变量或命令行属性的密码短语?
我已经看到了:但是它是针对maven的一个非常旧的版本,我使用的是3.2.2,所以同样的解决方案不适用 基本上,无论命令行上的属性、pom.xml中的属性或环境变量的组合如何,我都无法获得maven gpg插件来避免弹出代理对话框 出于安全考虑,我们决定在settings.xml中不包含明文形式的密码短语,因为这是一个糟糕的主意。使用加密的maven文件只需将主密钥移动到另一个纯文本文件 软件版本:如何让maven gpg插件使用来自环境变量或命令行属性的密码短语?,maven,gnupg,Maven,Gnupg,我已经看到了:但是它是针对maven的一个非常旧的版本,我使用的是3.2.2,所以同样的解决方案不适用 基本上,无论命令行上的属性、pom.xml中的属性或环境变量的组合如何,我都无法获得maven gpg插件来避免弹出代理对话框 出于安全考虑,我们决定在settings.xml中不包含明文形式的密码短语,因为这是一个糟糕的主意。使用加密的maven文件只需将主密钥移动到另一个纯文本文件 软件版本: $ gpg --version gpg (GnuPG) 2.1.2 libgcrypt 1.6.
$ 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探员挡住了我的去路,对我撒谎
如果我在pom.xml属性中设置了实际的密码短语,GPG代理仍将提示我:(
E7C89BBB
必须有一种方法可以做到这一点,而不必将密码以明文形式保存在某个地方,但我无法使用正确的Google来找到这个答案,希望你们能帮助我。编辑:此解决方案仅适用于gnupg 2.1.x。2.0.x不识别--pinentry模式命令行参数,它爆炸了。不幸的是,在mavens中据我所知,除了第二个配置文件之外,没有办法让它按照哪个版本的gnupg做正确的事情。它可能需要对插件进行更新,以“正确”的方式来做
天啊,我刚刚弄明白了,你必须为gpg指定一对参数才能将它的pinentry模式更改为“loopback”。一旦你这样做了,它将从环境变量或用户属性中接受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>
org.apache.maven.plugins
maven gpg插件
1.6
符号伪影
验证
签名
--松垂模式
环回
您可以使用不使用gpg
的插件进行签名,这样您就不需要将提供的密码短语作为环境变量进行复杂的配置
sign maven plugin
只支持所有配置项作为环境变量
<properties>
<gpg.keyname>E7C89BBB</gpg.keyname>
<gpg.passphrase><![CDATA[lolcomplicatedpassphrase]]></gpg.passphrase>
</properties>
<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>