无法执行目标org.apache.maven.plugins:maven-gpg-plugin

21

这个错误让我发疯了。请问有人能帮帮我吗? 我已经安装了 gpg 并且它也在 PATH 中。是什么导致了这个错误!!!

我正在 Linux 和 Windows 上的 jenkins 1.5、maven 3.0.3 上运行此作业(两者都显示相同的错误)。

[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (default) on project sample: Exit code: 2 -> [Help 1]
    [INFO] [ERROR] 
    [INFO] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [INFO] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [INFO] [ERROR] 
    [INFO] [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [INFO] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 4:53.571s
    [INFO] Finished at: Fri Aug 14 14:00:36 PDT 2015
    [INFO] Final Memory: 21M/620M
    [INFO] ------------------------------------------------------------------------
    [JENKINS] Archiving /var/lib/jenkins/jobs/sample/workspace/pom.xml to /var/lib/jenkins/jobs/sample/modules/com.sample$sample/builds/2015-08-14_13-55-35/archive/com.sample/sample/1.0.0-SNAPSHOT/sample-1.0.0-SNAPSHOT.pom
    Waiting for Jenkins to finish collecting data
    mavenExecutionResult exceptions not empty
    message : Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5:prepare (default-cli) on project sample: Maven execution failed, exit code: '1'
    cause : Maven execution failed, exit code: '1'
    Stack trace : 
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5:prepare (default-cli) on project sample: Maven execution failed, exit code: '1'
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
        at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158)
        at hudson.maven.Maven3Builder.call(Maven3Builder.java:100)
        at hudson.maven.Maven3Builder.call(Maven3Builder.java:66)
        at hudson.remoting.UserRequest.perform(UserRequest.java:118)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:326)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.maven.plugin.MojoExecutionException: Maven execution failed, exit code: '1'
        at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:281)
        at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:232)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 26 more
    Caused by: org.apache.maven.shared.release.ReleaseExecutionException: Maven execution failed, exit code: '1'
        at org.apache.maven.shared.release.phase.AbstractRunGoalsPhase.execute(AbstractRunGoalsPhase.java:89)
        at org.apache.maven.shared.release.phase.RunPrepareGoalsPhase.execute(RunPrepareGoalsPhase.java:44)
        at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
        at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
        at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
        at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
        at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:277)
        ... 29 more
    Caused by: org.apache.maven.shared.release.exec.MavenExecutorException: Maven execution failed, exit code: '1'
        at org.apache.maven.shared.release.exec.InvokerMavenExecutor.executeGoals(InvokerMavenExecutor.java:394)
        at org.apache.maven.shared.release.exec.AbstractMavenExecutor.executeGoals(AbstractMavenExecutor.java:110)
        at org.apache.maven.shared.release.phase.AbstractRunGoalsPhase.execute(AbstractRunGoalsPhase.java:81)
        ... 35 more
    channel stopped
    Archiving artifacts
    An attempt to send an e-mail to empty list of recipients, ignored.
    Finished: FAILURE

当您在Jenkins节点上从命令行运行“mvn”时,是否会发生这种情况?您应该真的添加“-e”开关以查看更多日志。 - Slav
我有 -e-X 选项。这是它记录的最大信息量。如果我在 Jenkins 中点击“立即构建”则可以成功构建。但是,如果我在 Jenkins 中执行“执行 Maven 发布”,它就会失败。我的 Maven 发布构建目标和选项是 -Dresume=false release:clean release:prepare release:perform。我甚至尝试了 -Dgpg.skip=true,但没有任何区别。 - user1164061
它是否可以在命令行上工作,而不需要Jenkins但在同一节点上? - Slav
尝试在没有Jenkins的情况下使用命令行,但是我得到了相同的错误。 - user1164061
我希望有人能够帮助你,但这超出了我的范围。 - Slav
在出现错误之前,是否有任何“没有默认密钥:无法使用密钥”GPG 错误/警告? - Kuzeko
3个回答

37
如果您不需要将您的构件签名,您可以禁用或跳过父POM中定义的gpg插件的执行。
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

或者使用gpg.skip=true来运行构建(参见Maven GPG Plugin)。

如果您需要对您的构件进行签名,您应该检查父POM中gpg插件的配置,或者覆盖您的POM中的配置。也许父POM中的某些设置与您系统的环境不匹配,但从错误消息中很难确定。


2
我的Maven发布构建目标和选项是-Dresume=false release:clean release:prepare release:perform。我甚至尝试了-Dgpg.skip=true,但没有任何区别。 - user1164061
1
谢谢,这帮了我很多。一直在寻找解决这个问题的方法,最快的答案是将以下内容添加到XML中:<configuration> <skip>true</skip> </configuration> - asmgx
1
与@user1164061相同的问题,-Dgpg.skip=true没有效果。签名仍然被触发。我无法弄清如何禁用此插件,因为它是从另一个项目的父POM继承而来的。 - buzz3791
1
您还需要添加版本__<version>3.0.1</version>__。 - 100rabh

9

在夜间的 Jenkins 构建中,我在从 Ubuntu 16 升级到 Ubuntu 18.04 LTS 后遇到了这个问题。

gpg --version
gpg (GnuPG) 2.2.4

首先,我在非Jenkins环境下检查了同一项目。

该项目涉及IT技术。
mvn install

我收到了这条消息

gpg: signing failed: Inappropriate ioctl for device

这指向了

https://github.com/keybase/keybase-issues/issues/2798

以及

https://tutorials.technology/solved_errors/21-gpg-signing-failed-Inappropriate-ioctl-for-device.html

export GPG_TTY=$(tty)

这里建议使用该方法。我已将其添加到我的.profile文件中并重新启动了

mvn install 

测试。这次我被要求通过终端输入OpenPGP密钥的密码。通过命令行的第二次运行成功而无需输入密钥。

然后我停止并重新启动了Jenkins,并尝试失败的任务。这一次它成功了。

不幸的是,它在启动xsession的Jenkins jobx中仍然无法工作。 http://maven.apache.org/plugins/maven-gpg-plugin/usage.html 明确指出您可以将gpg.passphrase放入settings.xml中,我已经有效地使用了很长时间。现在我不知道如何恢复此行为,我只能提供上述的解决方法。

另请参见 避免在使用Maven发布插件时出现GPG签名提示


7
这意味着您需要一个密钥来签署jar文件。只需按照过程进行操作,直到最后一步(显然不需要将其复制到github)。
以下是简要概述:
  1. 打开Git Bash
  2. gpg --gen-key #使用默认值,4096作为密钥大小
  3. gpg --list-secret-keys --keyid-format LONG
  4. (可选) gpg --armor --export %上面的密钥%

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接