Maven 上传项目至中央仓库:从申请到发布的完整指南
将自己开发的工具包上传至 Maven 中央仓库,能让全球开发者通过简单的依赖坐标直接使用,是开源贡献的重要一步。本文基于 Sonatype OSSRH(Open Source Software Repository Hosting)平台,详细讲解从账号注册到最终发布的全流程。
准备工作
必要条件
- 一个公开的代码仓库(如 GitHub、Gitee),用于托管项目源码。
- 一个可验证的域名(如个人域名或代码平台域名,用于 GroupId 验证)。
- 安装 GPG(用于对发布文件进行签名,确保完整性)。
环境配置
生成 GPG 密钥:
打开终端执行以下命令,按提示输入姓名、邮箱和密码:1
gpg --full-generate-key
生成后,上传公钥至公共服务器(确保 Maven 能验证签名):
1
gpg --keyserver hkp://keyserver.ubuntu.com:80 --send-keys 你的密钥ID
(密钥 ID 可通过
gpg --list-keys查看,格式为 8 位十六进制数)
Sonatype 账号与项目申请
Maven 中央仓库通过 Sonatype OSSRH 管理开源项目,需先注册并申请项目托管。
注册 Sonatype 账号
访问 Sonatype JIRA 注册账号,填写用户名、邮箱等信息(建议使用常用邮箱,后续验证需要)。
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
创建项目发布申请(New Issue)
登录后点击 Create 按钮,选择:
- Project:
Community Support - Open Source Project Repository Hosting - Issue Type:
New Project
- Project:
填写申请信息:
- Summary:项目名称(如
tools-java: 通用工具类库)。 - Group Id:项目的 Maven GroupId(关键!需验证所有权)。
- 若有个人域名(如
example.com),可设为com.example。 - 若无域名,使用代码托管平台域名(如 Gitee 项目
gitee.com/yourname/tools-java,则 GroupId 为io.gitee.yourname)。
- 若有个人域名(如
- Project URL:项目源码地址(如
https://gitee.com/yourname/tools-java)。 - SCM URL:源码仓库地址(如
https://gitee.com/yourname/tools-java.git)。 - Other Details:简要描述项目功能。
- Summary:项目名称(如
提交完成之后,会创建一个Issues
验证 GroupId 所有权
提交申请后,Sonatype 工作人员会在 1-2 个工作日内回复,要求验证 GroupId 所有权:
若使用个人域名:在 DNS 解析中添加 TXT 记录,值为 JIRA issue 编号(如
OSSRH-12345)。若使用代码平台域名:在代码仓库中创建一个与 JIRA issue 同名的公共仓库(如
https://gitee.com/yourname/OSSRH-12345)。
完成验证后回复工作人员,待审核通过(状态变为 RESOLVED),即可开始发布。
项目配置(pom.xml)
需在 pom.xml 中添加必要的元数据和插件配置,满足中央仓库的规范。
基本信息配置
添加项目描述、开源协议、开发者信息等:
1 | <project> |
发布配置与插件
添加部署地址、签名插件、源码和文档插件:
1 | <project> |
配置 Maven 全局设置(settings.xml)
在 settings.xml(通常位于 ~/.m2/settings.xml)中添加 Sonatype 账号和 GPG 密码:
1 | <settings> |
部署与发布流程
部署到 Staging 仓库
执行命令将项目部署到 Sonatype 的临时仓库(Staging):
1 | mvn clean deploy |
- 若版本号含
-SNAPSHOT(如1.0.0-SNAPSHOT),会部署到snapshots仓库。 - 若为正式版本(如
1.0.0),会部署到 Staging 仓库等待审核。
验证与发布(正式版本)
- 登录 Sonatype Nexus 控制台,使用 Sonatype 账号登录。
- 进入 Staging Repositories,找到刚部署的仓库(通常以
io-gitee-yourname开头)。
上传之后,jar包会放到staging暂存库中,我们需要将其发布到release库
- Close仓库:点击Close按钮,系统会自动验证发布规则(如是否包含源码、签名是否有效)。
- 若验证失败,查看
Activity标签的错误信息,修复后重新部署。
- Release 仓库:验证通过后,点击
Release按钮,将项目发布到中央仓库。
第一次发布成功后,在创建项目的issue上会有新的评论
同步至 Maven 中央仓库
发布后,Sonatype 会自动同步到 Maven 中央仓库:
同步时间:通常 10-30 分钟可在 Sonatype 仓库 查到。
全球同步:约 2-4 小时后可在 Maven 中央仓库搜索 找到。
常见问题与解决
1. GPG 签名失败
错误:
gpg: signing failed: Inappropriate ioctl for device解决:在命令前添加GPG_TTY=$(tty),确保终端支持交互:
1
GPG_TTY=$(tty) mvn clean deploy
2. 验证规则失败
- 错误:
Failed to close staging repository ... due to failing rules - 解决:查看 Nexus 控制台的Activity日志,常见原因包括:
- 缺少源码或 Javadoc Jar 包(确保插件配置正确)。
- 未签名(检查 GPG 插件和密钥配置)。
- 元数据不全(补充
licenses、scm、developers配置)。
3. 版本重复发布
- 注意:正式版本(非 SNAPSHOT)一旦发布无法修改或删除,若需更新需递增版本号(如
1.0.1)











v1.3.10