Gradle配置后Maven Central仍不识别构件签名问题求助
解决Maven Central不识别Gradle签名构件的问题
Gradle配置排查
1. 移除冲突的签名配置
你同时使用了useGpgCmd()和useInMemoryPgpKeys(),这两个方法互斥:
useGpgCmd()依赖本地系统的GPG命令行工具签名useInMemoryPgpKeys()直接使用内存中提供的密钥对
保留其中一个即可,比如使用内存密钥的正确配置:
signing { useInMemoryPgpKeys(signingKey, signingPassword) }
2. 确认签名任务触发逻辑
检查isPublishingToMavenCentral的判断是否准确:
- 确认
mavenCentralRepoName变量值与Maven Central仓库的name匹配(默认Maven Central仓库name为"MavenCentral") - 构建时添加
--info参数,查看Sign任务是否执行:
若无相关日志输出,说明判断逻辑未触发签名,需调整条件。./gradlew publish --info | grep "Sign"
3. 验证签名文件生成
本地执行发布到mavenLocal,检查构件目录下是否生成.asc签名文件:
./gradlew publishToMavenLocal
在~/.m2/repository/[你的构件路径]下,确认存在与jar、pom文件对应的.asc文件(如my-artifact-1.0.0.jar.asc)。若没有,说明签名未生成,需排查配置问题。
签名有效性验证
用GPG命令验证本地构件的签名合法性:
gpg --verify my-artifact-1.0.0.jar.asc my-artifact-1.0.0.jar
若验证失败,说明signingKey或signingPassword配置错误,需确认密钥和密码的正确性。
密钥同步检查
Maven Central可能需要密钥同步到多个主流服务器,仅上传到Ubuntu服务器可能存在同步延迟或覆盖不全的问题:
- 上传密钥到更多服务器:
gpg --keyserver pool.sks-keyservers.net --send-keys MY-KEY gpg --keyserver keys.openpgp.org --send-keys MY-KEY - 等待密钥同步(通常需几分钟到几小时),再验证是否能从其他服务器获取:
gpg --keyserver keys.openpgp.org --recv-keys MY-KEY
额外验证步骤
- 确认POM配置包含签名构件:Gradle的signing插件默认会自动将签名文件添加到publication中,但如果自定义了publication配置,需确保未移除签名构件。
- 查看Maven Central的具体报错:如果有明确的签名验证错误(如密钥未找到、签名不匹配),根据错误信息针对性排查。
内容的提问来源于stack exchange,提问作者Roäc
相关产品推荐
相关产品推荐

