我正在尝试设置我的Maven构建,这样它就可以自动地对JAR签名,而不需要手动输入密码,但是无论我如何配置maven-gpg-plugin,它要么失败,要么总是请求密码。
我使用这页面来指导如何设置Maven settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.keyname>${env.GPG_KEY_NAME}</gpg.keyname>
<gpg.passphrase>${env.GPG_PASS_PHRASE}</gpg.passphrase>
</properties>
</profile>
</profiles>
<servers>
<server>
<id>ossrh</id>
<username>${env.OSSRH_JIRA_USERNAME}</username>
<password>${env.OSSRH_JIRA_PASSWORD}</password>
</server>
</servers>
</settings>上面的环境变量是在环境中设置的。
maven-gpg-plugin配置来自这个问题,我尝试设置POM,如下所示:
<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>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>但是,当我构建时,我会得到以下错误:gpg: setting pinentry mode 'loopback' failed: Not supported
我尝试将allow-loopback-pinentry添加到gpg-agent.conf中,但结果是一样的。如果我从Maven插件配置中删除了<gpgArguments>,那么我就会得到请求密码的弹出消息。
我使用的是gpg2版本2.1.11
发布于 2018-01-24 20:51:27
这个问题之所以出现,是因为我试图使用gpg2而不是gpg,因为我认为gpg2更好(没有进行实际研究)。gpg 2的手册页声明:
相对于来自GnuPG 1.x的独立命令gpg (它可能更适合服务器和嵌入式平台),2.x版本通常以gpg2的名称安装,并以桌面为目标,因为它需要安装其他几个模块。
gpg2是针对桌面的,因此我假设是“硬编码”来询问密码,实际上我应该使用gpg。
发布于 2018-01-22 21:45:27
插件文档说默认的可执行文件是gpg。如果配置文件没有启用,那么它是否选择了所需的gpg2?useAgent == true是默认的,应为每个文档的gpg2保留这种方式。
要使用代理,请尝试在插件中配置可执行文件,而不是配置配置文件。
<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>
<executable>gpg2</executable>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>若要在没有代理的情况下执行此操作,请使用settings.xml文件,尝试以下操作(基于我对目标和使用文档的读取):
<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>
<executable>gpg2</executable>
<keyname>${gpg.keyname}</keyname>
<passphraseServerId>${gpg.keyname}</passphraseServerId>
</configuration>
</execution>
</executions>
</plugin>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<properties>
<gpg.keyname>${env.GPG_KEY_NAME}</gpg.keyname>
</properties>
<servers>
<server>
<id>${env.GPG_KEY_NAME}</id>
<passphrase>${env.GPG_PASS_PHRASE}</passphrase>
</server>
</servers>
</settings>注意,我没有按照他们的建议使用配置文件,因为Maven配置文件文档 (强调我的):
将自动激活所有构建的,除非使用前面描述的方法之一激活同一中的另一个配置文件。所有在默认情况下处于活动状态的配置文件在命令行上或通过其激活配置.中的配置文件被自动禁用。
这给我带来了“有趣”的调试会话,我也看到它捕获了许多其他毫不知情的开发人员。
https://stackoverflow.com/questions/48388720
复制相似问题