You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle发布Java SDK至Maven Central时GPG非零退出值2问题及发布异常排查

Gradle发布Java SDK至Maven Central时GPG非零退出值2问题及发布异常排查

我来帮你梳理下你遇到的这几个问题,结合Gradle签名和Sonatype发布的常见坑逐一分析:

一、GPG非零退出值2的典型含义

在Gradle签名场景下,这个错误基本意味着GPG命令执行时遇到了无法解决的问题,常见原因包括:

  • 本地GPG环境找不到指定的密钥
  • 密钥密码错误
  • GPG命令参数配置有误
  • 切换签名方式时(比如从内存密钥转本地GPG命令)出现环境不匹配

结合你的配置来看,大概率是签名分支的逻辑没有按预期触发,导致 fallback 到本地GPG命令但本地没有对应密钥。

二、为什么publish成功但publishToMavenLocal + build失败?

这核心是签名逻辑的触发条件或分支执行不一致:
你的签名配置里只有当project.hasProperty('skip.signing')为false时才会执行签名,而publish和publishToMavenLocal的差异可能出在以下几点:

  1. 签名分支未正确触发:你在gradle.properties里配置了signing.secretKey,但代码里调用useInMemoryPgpKeys时用的是signing.keyId——而你的gradle.properties里只有signing.key,没有signing.keyId!这会导致properties.hasProperty("signing.secretKey")虽然为true,但signing.keyId为空,进而触发GPG命令执行失败。
  2. 任务触发的签名时机差异:publish任务可能在某些场景下跳过了签名检查(比如你无意中设置了skip.signing属性),而publishToMavenLocal严格执行了签名步骤。

三、密钥相关问题排查与解决建议

1. 修复签名配置的参数不匹配

你的build.gradle中使用useInMemoryPgpKeys需要三个参数:keyId、secretKey、password,但gradle.properties里只配置了signing.key而不是signing.keyId,导致keyId参数为空。你需要二选一调整:

  • 方案一:修改gradle.properties,把signing.key改为signing.keyId(确保值是你的GPG密钥的8位十六进制ID)
  • 方案二:修改build.gradle中的代码,将signing.keyId替换为signing.key,保持配置与代码的参数名一致

2. 验证签名分支是否正确执行

可以在build.gradle的签名配置里添加日志输出,确认实际走的是哪个分支:

signing {
    if(properties.hasProperty("signing.secretKey")){
        println "✅ 使用内存中的PGP密钥进行签名"
        useInMemoryPgpKeys(
            properties.getProperty("signing.keyId") as String,
            properties.getProperty("signing.secretKey") as String,
            properties.getProperty("signing.password") as String
        )
    } else {
        println "⚠️  使用本地GPG命令进行签名"
        useGpgCmd()
    }
    sign publishing.publications
}

运行./gradlew clean build publishToMavenLocal,查看控制台输出的日志,就能明确签名逻辑是否按预期走内存密钥分支。

3. 解决Sonatype部署内容看不到的问题

publish成功只是把包上传到了Sonatype的Staging Repository(临时仓库),你需要手动登录Sonatype Nexus后台:

  • 找到对应的Staging Repository,检查是否有上传的包
  • 执行Close操作(Sonatype会自动验证包的完整性、签名等)
  • 验证通过后执行Release操作,包才会同步到Maven Central

如果后台看不到Staging Repository,可以运行./gradlew clean publish --info查看详细日志,确认上传请求的响应状态和内容。

4. GPG密钥在keys.openpgp.org搜不到的问题

hkps://keys.openpgp.org要求必须验证密钥关联的邮箱地址,密钥才会公开显示。你需要:

  • 检查密钥中绑定的邮箱是否收到验证邮件
  • 点击邮件中的链接完成验证
  • 等待1-2小时的同步时间,之后就能搜索到你的密钥了

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:09:31