如何让maven gpg插件使用来自环境变量或命令行属性的密码短语?

如何让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.

我已经看到了:但是它是针对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探员挡住了我的去路,对我撒谎 如果我在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>