0

我正在尝试设置我的 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 但结果是一样的。如果我<gpgArguments>从 Maven 插件配置中删除 ,则会弹出询问密码的弹出窗口。

我正在使用 gpg2 版本 2.1.11

4

2 回答 2

0

插件文档说默认可执行文件是gpg. 如果配置文件未启用,它是否会选择您想要的gpg2useAgent== 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 配置文件文档(强调我的):

除非使用前面描述的方法之一激活同一 POM 中的另一个配置文件,否则所有构建将自动处于活动状态。当在命令行或通过其激活配置激活 POM 中的配置文件时,默认情况下处于活动状态的所有配置文件都会自动停用。

这给我带来了“有趣”的调试会话,我也看到它吸引了许多其他毫无戒心的开发人员。

于 2018-01-22T21:45:27.507 回答
0

出现这个问题是因为我试图使用gpg2而不是gpg我认为gpg2更好(没有实际研究)。gpg 2 的手册页指出:

与 GnuPG 1.x 中可能更适合服务器和嵌入式平台的独立命令 gpg 相比,2.x 版本通常以 gpg2 名称安装并针对桌面,因为它需要多个其他模块安装。

gpg2是针对桌面的,因此我假设是“硬编码”来询问密码,我实际上应该使用gpg.

于 2018-01-24T20:51:27.577 回答