我正在尝试设置我的Maven构建,以便它自动签署JAR而无需手动输入密码,但无论我如何尝试配置maven-gpg-plugin
,它都会失败或总是要求密码短语
我已使用this页面作为如何设置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>
上面的环境变量是在环境中设置的。
来自this question的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
答案 0 :(得分:0)
Plugin docs表示默认可执行文件为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
文件执行此操作,请尝试此操作(根据我对目标的读取和usage docs):
<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 profile docs (强调我的):
将自动激活所有版本,除非使用上述方法之一激活同一POM中的另一个配置文件。 当在命令行或激活配置中激活POM中的配置文件时,默认情况下处于活动状态的所有配置文件都会自动停用。
这引起了我“有趣”的调试会话,我也看到它也吸引了许多其他毫无戒心的开发人员。
答案 1 :(得分:0)
由于我尝试使用gpg2
而不是gpg
,因为我假设gpg2
更好(没有实际研究),因此出现了问题。 gpg 2的手册页指出:
与来自GnuPG 1.x的独立命令gpg相反,即 可能更适合服务器和嵌入式平台,2.x 版本通常以gpg2的名称安装并定位到 桌面,因为它需要 其他几个模块也要安装。
gpg2
针对的是桌面,因此我假设它是“硬编码的”#39;要求输入密码,我实际上应该使用gpg
。