You need to enable JavaScript to run this app. 使用gradle-nexus.publish-plugin发布到Maven Central时签名失败如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用gradle-nexus.publish-plugin发布到Maven Central时签名失败如何解决

故障原因及解决方案

核心故障原因

1. signingKey属性被高优先级配置覆盖

Gradle的项目属性(extra属性)有固定的优先级顺序,从高到低依次为:

  • 命令行通过-P传入的参数
  • 带org.gradle.project.前缀的系统属性
  • 带ORG_GRADLE_PROJECT_前缀的系统环境变量
  • 项目根目录下的gradle.properties
  • 用户目录~/.gradle/下的gradle.properties
  • Gradle安装目录下的gradle.properties
    你读取到的signingKey永远为固定值,是因为存在更高优先级的配置覆盖了你修改的配置:
  • 优先检查系统环境变量是否配置了ORG_GRADLE_PROJECT_signingKey
  • 其次检查用户目录下~/.gradle/gradle.properties(Windows路径为C:\Users\用户名\.gradle\gradle.properties)是否配置了固定的signingKey

2. PGP私钥格式不完整

你遇到的premature end of stream in PartialInputStream报错,是因为读取到的PGP私钥缺失内容:
PGP私钥是多行ASCII格式内容,如果你配置属性时没有处理换行符,Gradle只会读取第一行内容,导致私钥不完整无法解析。你打印出来的仅为私钥开头片段,就属于典型的换行符处理错误。

3. 代码笔误(不影响功能但干扰排查)

你的签名配置里异常提示写反了,会误导后续问题排查:

useInMemoryPgpKeys(
    // 第一个参数是密钥,异常提示写成了找不到密码
    signingKey ?: throw GradleException("Couldn't find a signing password"),
    // 第二个参数是密码,异常提示写成了找不到密钥
    signingPassword ?: throw GradleException("Couldn't find a signing key")
)

解决步骤

  1. 排查属性来源:
    执行命令gradle properties | findstr signingKey(Windows)或gradle properties | grep signingKey,查看signingKey属性的具体来源,删除高优先级的冗余配置。
  2. 修正私钥格式:
  • 导出ASCII格式的PGP私钥,将所有换行符替换为\n,整合成一行完整内容,确保包含-----BEGIN PGP PRIVATE KEY BLOCK-----开头和-----END PGP PRIVATE KEY BLOCK-----结尾
  • 将处理后的完整私钥配置到对应属性位置
  1. 修正代码笔误:把两个异常提示的内容互换,避免后续排查误导。
  2. 验证配置:执行构建任务查看打印的signingKey为完整内容后,再执行发布相关任务即可。

内容的提问来源于stack exchange,提问作者TheOnlyTails

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:24:03