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

