首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在签名JAR时防止密码请求

在签名JAR时防止密码请求
EN

Stack Overflow用户
提问于 2018-01-22 19:13:32
回答 2查看 510关注 0票数 0

我正在尝试设置我的Maven构建,这样它就可以自动地对JAR签名,而不需要手动输入密码,但是无论我如何配置maven-gpg-plugin,它要么失败,要么总是请求密码。

我使用页面来指导如何设置Maven settings.xml

代码语言:javascript
复制
<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,如下所示:

代码语言:javascript
复制
<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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-24 20:51:27

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-01-22 21:45:27

插件文档说默认的可执行文件是gpg。如果配置文件没有启用,那么它是否选择了所需的gpg2useAgent == true是默认的,应为每个文档的gpg2保留这种方式。

要使用代理,请尝试在插件中配置可执行文件,而不是配置配置文件。

代码语言:javascript
复制
<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文件,尝试以下操作(基于我对目标和使用文档的读取):

代码语言:javascript
复制
<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配置文件文档 (强调我的):

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

这给我带来了“有趣”的调试会话,我也看到它捕获了许多其他毫不知情的开发人员。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48388720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档