答案是:Gradle构件必须先发布到Sonatype OSSRH staging仓库,经Close/Release后才同步至Maven Central。流程包括注册Sonatype账号并审核groupId、配置maven-publish与signing插件、使用s01.oss.sonatype.org地址、GPG签名、上传后手动Close并Release。

在 Gradle 中将构件发布到 Maven 中央仓库,不是直接推送到中央仓库本身,而是通过 Sonatype OSSRH(OSS Repository Hosting) 作为中间代理。Maven 中央仓库已不再接受直接部署,所有新项目必须经由 Sonatype 审核并同步过去。
1. 注册 Sonatype 账号并创建 Issue
这是前提步骤,不可跳过:
- 访问 https://www.php.cn/link/e2e2f41b3b67d8acc736d3cb33774a68,注册 Jira 账号
- 新建一个 Project 类型的 issue(模板选 New Project)
- 填写 groupId(建议用你拥有的域名反写,如
com.example)、项目名称、SCM 地址(GitHub/GitLab)、描述等 - 等待 Sonatype 工作人员审核(通常几小时到一两天),审核通过后你会收到邮件,同时你的 groupId 会被授权发布
2. 配置 Gradle 发布插件和仓库地址
使用 maven-publish 插件,并指向 Sonatype 的 staging 仓库:
在 build.gradle(或 build.gradle.kts)中添加:
// Groovy DSL 示例
plugins {
`maven-publish`
signing
}
<p>publishing {
publications {
create<mavenpublication>("mavenJava") {
from(components["java"])
pom {
name.set("Your Library Name")
description.set("A short description")
url.set("<a href="https://www.php.cn/link/f53203e7da73bf0970140a39c986231f">https://www.php.cn/link/f53203e7da73bf0970140a39c986231f</a>;)</mavenpublication></p><pre class="brush:php;toolbar:false;"> licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("yourid")
name.set("Your Name")
email.set("you@example.com")
}
}
scm {
connection.set("scm:git:git://github.com/yourname/yourproject.git")
developerConnection.set("scm:git:ssh://git@github.com/yourname/yourproject.git")
url.set("https://www.php.cn/link/f53203e7da73bf0970140a39c986231f;)
}
}
}
}
repositories {
maven {
name = "sonatype"
url = uri("https://www.php.cn/link/d466a76221e3386b27ca7d99f8ede875/service/local/staging/deploy/maven2/")
credentials(PasswordCredentials::class) {
username = project.findProperty("sonatypeUsername") as String? ?: System.getenv("SONATYPE_USERNAME")
password = project.findProperty("sonatypePassword") as String? ?: System.getenv("SONATYPE_PASSWORD")
}
}
}}
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
signing { sign(publishing.publications["mavenJava"]) }
注意:
- URL 已更新为新的 Nexus3 地址(s01.oss.sonatype.org),旧的 oss.sonatype.org 已停用
- 签名是强制要求,否则无法同步到中央仓库
3. 配置 GPG 签名(本地或 CI)
你需要一个 GPG 密钥对,并上传公钥到 keyserver(如 keys.openpgp.org):
- 生成密钥:
gpg --full-generate-key(推荐 RSA 4096) - 导出公钥:
gpg --armor --export YOUR_KEY_ID,粘贴到 https://www.php.cn/link/f0b7c0bfdbad8aa8031c3e8cae039066 - 在 Gradle 中引用私钥(不建议硬编码):
可通过环境变量GPG_SECRET_KEY(Base64 编码后的私钥内容)和GPG_PASSPHRASE传入,或使用gpg --export-secret-keys --armor导出后配置文件读取
Gradle 自动识别 gpg 命令,也可显式配置:
signing {
useGpgCmd()
sign(publishing.publications["mavenJava"])
}
4. 执行发布并手动关闭/释放 staging 仓库
发布流程分两步:上传到 staging 仓库 → 审核通过后释放 → 同步至中央仓库(约 1–2 小时):
- 运行命令:
./gradlew publish -PsonatypeUsername=xxx -PsonatypePassword=yyy - 登录 https://www.php.cn/link/d466a76221e3386b27ca7d99f8ede875 → 进入 Staging Repositories
- 找到刚上传的仓库(通常以
yourgroupid-开头),检查内容是否完整(含 .jar、.pom、.module、.asc 等) - 点击 Close → 等待自动验证(检查签名、元数据、Javadoc/JAR 结构等)→ 成功后点击 Release
- 约 10 分钟后可在 releases 仓库 查看;1–2 小时后同步到 search.maven.org
不复杂但容易忽略:签名、POM 元信息完整性、SCM 和许可证字段缺一不可,任意一项缺失都会导致 Close 失败。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










