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

如何使用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配置调整要点,你可以照着改:

  1. 先把必要的插件配上:
plugins {
    id 'java'
    id 'maven-publish'
    id 'signing'
    id "io.github.gradle-nexus.publish-plugin" version "1.3.0"
}
  1. 配置发布的构件信息,得符合中央仓库的规范:
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')
            }
        }
    }
}
  1. 配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:28:07