如何使用Gradle部署至ossrh-staging-api.central.sonatype.com并手动发布至Maven中央仓库?
如何使用Gradle部署至ossrh-staging-api.central.sonatype.com并手动发布至Maven中央仓库?
嘿,我完全懂你现在的困扰——Gradle部署脚本明明跑起来没报错,可到Sonatype后台找半天,就是看不到能手动发布的staging仓库内容,这搁谁都会急得挠头。咱们一步步来排查问题,给你捋清楚该怎么调整:
首先,先从你的Gradle脚本配置找起,很多“静默失败”都藏在这里:
- 先确认你有没有引入正确的插件:
maven-publish、signing,还有Sonatype官方推荐的nexus发布插件,版本尽量用稳定版,别用太老的,不然容易出兼容问题。 - 检查部署地址和认证信息:你得确保脚本里指定的staging仓库地址是正确的,还有Sonatype的用户名密码,别硬编码在脚本里,最好存在
gradle.properties或者系统环境变量里,避免泄露。另外,认证信息一定要和你Sonatype后台的账号对应,权限不够也会导致上传后看不到仓库。 - 别只看脚本的“成功提示”,把Gradle日志调详细点(执行
./gradlew publish -i),仔细扒扒日志——比如有没有提示缺少GPG签名、构件校验文件,或者项目坐标(groupId/artifactId/版本号)不符合中央仓库规范,这些问题有时候不会直接报错,但会导致Sonatype拒收你的构件。
然后,说说Sonatype后台看不到仓库的常见原因:
- 你的部署可能没成功创建staging仓库,或者构件没关联到仓库。有些情况是Gradle只上传了构件,但没完成staging仓库的前置验证,Sonatype就不会把它显示在可发布列表里。
- 一定要检查GPG签名!中央仓库要求所有构件必须签名,要是你没配置签名任务,或者签名用的密钥没上传到GPG服务器,哪怕脚本跑过了,Sonatype也不会把你的构件纳入可发布的staging仓库,后台自然啥也看不到。
- 看看后台的“Staging Repositories”页面有没有过滤条件,是不是不小心把你的仓库给滤掉了,或者有没有失败的仓库记录,点进去看看失败原因。
接下来给你几个关键的Gradle配置调整要点,你可以照着改:
- 先把必要的插件配上:
plugins { id 'java' id 'maven-publish' id 'signing' id "io.github.gradle-nexus.publish-plugin" version "1.3.0" }
- 配置发布的构件信息,得符合中央仓库的规范:
publishing { publications { mavenJava(MavenPublication) { from components.java pom { name = '你的项目名称' description = '给项目写个清晰的详细描述' url = '项目主页' licenses { license { name = 'The Apache License, Version 2.0' url = 'Apache 2.0 License' } } developers { developer { id = '你的开发者ID' name = '你的名字' email = '你的联系邮箱' } } scm { connection = 'scm:git:git://你的项目仓库地址' developerConnection = 'scm:git:ssh://你的项目仓库地址' url = '项目代码仓库主页' } } } } repositories { maven { url = uri("https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/") credentials { username = project.findProperty('sonatypeUsername') ?: System.getenv('SONATYPE_USERNAME') password = project.findProperty('sonatypePassword') ?: System.getenv('SONATYPE_PASSWORD') } } } }
- 配置GPG签名,这一步绝对不能少:
signing { sign publishing.publications.mavenJava }
提醒下,你得在本地生成GPG密钥,还要把公钥上传到GPG密钥服务器,不然Sonatype验证不过。
4. 用nexus发布插件来管理staging仓库,这样流程更规范:
nexusPublishing { repositories { sonatype { nexusUrl = uri("https://ossrh-staging-api.central.sonatype.com/service/local/") snapshotRepositoryUrl = uri("https://ossrh-snapshots.central.sonatype.com/content/repositories/snapshots/") username = project.findProperty('sonatypeUsername') ?: System.getenv('SONATYPE_USERNAME') password = project.findProperty('sonatypePassword') ?: System.getenv('SONATYPE_PASSWORD') } } }
配置完这些,你执行./gradlew publishToSonatype上传构件,之后去Sonatype后台的Staging Repositories里应该就能找到对应的仓库了,检查没问题后手动点“Close”,等验证通过再点“Release”就完成发布了。
最后再啰嗦几个小细节:
- 日志真的很重要,别嫌麻烦,一定要看详细日志,很多问题的线索都在里面。
- 项目坐标要唯一,不能和中央仓库已有的重复,不然Sonatype会拒收。
- 如果还是看不到,去Sonatype后台看看有没有失败的staging记录,里面会写清楚为啥没显示出来。
备注:内容来源于stack exchange,提问作者Horcrux7
相关产品推荐
相关产品推荐

