当前位置: 首页 > ops >正文

Maven 中央仓库操作指南

Maven 中央仓库操作指南

登录注册

在 Maven Central 登录(注册)账号。

添加命名空间

注册

通过右上角用户菜单跳转到命名空间管理页面:

image-20250524102724713

注册命名空间:

image-20250524102913085

填入你拥有的域名并注册:

image-20250524103054815

刚提交的命名空间状态是Unverified

image-20250524103208612

需要进行验证。

点击小图标复制验证用的 key 到剪切板:

image-20250524103344965

可以使用代码仓库帐号作为命名空间,此时不需要添加 DNS TXT,中央仓库只需要验证你对应的帐号即可。

支持 Github(io.github.myusername)、Gitee(io.gitee.myusername)等。具体可以查看官方文档。

DNS TXT

需要在你域名的 DNS 解析上添加一个 TXT 文件用于命名空间验证。

不同的 DNS 服务提供商有不同的添加方式,这里的官方文档列出了一些常见的 DNS 服务商的添加方式。

下面以我的 腾讯DNS 为例进行说明。

进入管理后台,添加一个一下的 DNS 记录:

image-20250524110027025

注意,记录值要和上边在中央仓库注册命名空间时候复制的验证密钥(Verification Key)一致。

设置好后需要等一段时间(通常5分钟以上)让 DNS 服务器将配置的 TXT 传播到其他 DNS 服务器,可能需要较长时间。

可以在 PowerShell(Windows)中用以下命令检查有没有生效:

Resolve-DnsName yourdomain.com -Type TXT

也可以通过在线工具Dig(DNS 查询)快速检测。

验证

点击验证按钮进行验证即可。

image-20250524112131818

如果验证失败(DNS 配置错误等原因),会一直显示 Pendding 这个状态,此时可以通过以下操作取消验证,然后重新验证即可:image-20250524112345330

验证 OK 后就会显示:

image-20250524112421201

用户令牌

中央仓库使用用户令牌(User Token)来发布 jar 包和身份验证。

生成令牌

在账户管理页面生成令牌:

image-20250524112852660

使用后会弹出一个界面,展示已经生成的令牌的用户名和密码,需要自行保存,该弹窗会在1分钟内自动关闭。

如果忘记记录了,可以重新操作以生成新的令牌,旧令牌将自动失效。

在 Maven 中使用令牌

修改 Maven 配置文件(settings.xml)以使用令牌:

<server><id>central</id><username>{token-name}</username><password>{token-password}</password>
</server>

GPG 密钥

中央仓库要求上传的项目必须包含由 GPG 密钥签名的源码和文档,因此必须要有 GPG 密钥。

生成密钥

生成 GPG 密钥:

gpg --gen-key

Windows 下可以使用 Gpg4win。下载和捐款选项是绑定的,但是点击后可以取消(Cancel)捐款,会自动下载程序。安装好后需要重启,以让其在命令行下生效。

生成过程会要求填写用户名和邮箱,并且需要给密钥提供一个密码。

该密码一定要牢记…

查看生成的密钥:

gpg --list-secret-keys --keyid-format LONG

最下边会展示一行:

ssb   rsa3072/4AA37B595F7B7F26 2025-05-24 [E] [expires: 2027-05-24]

这里的4AA37B595F7B7F26这十六位字符就是密钥 ID。

公开密钥

必须将公钥发到公共服务器上才能进行公钥-私钥验证。中央仓库支持多种 GPG 密钥服务器验证,这里使用 ubuntu 的密钥服务器:

gpg --keyserver keyserver.ubuntu.com --send-keys 4AA37B595F7B7F26

maven 配置

要让 Maven 使用 GPG 密钥打包源码和文档,需要修改配置:

<profile><id>ossrh</id><activation><activeByDefault>true</activeByDefault></activation><properties><gpg.executable>gpg</gpg.executable><gpg.passphrase>{password}</gpg.passphrase></properties>
</profile>

这里的{password}是你生成GPG密钥时候设置的密码。

不要忘了让配置生效:

<activeProfiles>    <activeProfile>ossrh</activeProfile>
</activeProfiles>

发布

发布插件

POM 中添加中央仓库的发布插件:

<plugin><groupId>org.sonatype.central</groupId><artifactId>central-publishing-maven-plugin</artifactId><version>0.7.0</version><extensions>true</extensions><configuration><publishingServerId>central</publishingServerId></configuration>
</plugin>

添加插件依赖:

<dependency><groupId>org.sonatype.central</groupId><artifactId>central-publishing-maven-plugin</artifactId><version>0.7.0</version><scope>provided</scope>
</dependency>

打包插件

中央仓库要求必须打包源码和java文档,所以要使用相应的打包插件:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.3.1</version><executions><execution><id>attach-sources</id><goals><goal>jar-no-fork</goal></goals></execution></executions>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.11.2</version><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions>
</plugin>

gpg 插件

在打包源码和文档时候,要使用 GPG 进行签名,需要添加插件:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>3.2.7</version><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions>
</plugin>

补充信息

中央仓库要求发布的 Maven 项目必须包含必要的信息,这些信息都要在 POM 文件中表明:

<!-- 项目描述 -->
<description>一个轻量级的 Java 工具库,提供树形结构操作功能。</description><!-- 开发者信息 -->
<developers><developer><name>icexmoon</name><email>icexmoon@qq.com</email><organization>cn.icexmoon</organization></developer>
</developers><!-- 开源许可证 -->
<licenses><license><name>Apache License 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0.txt</url><distribution>repo</distribution></license>
</licenses><!-- 版本控制仓库地址 -->
<scm><connection>scm:git:git@github.com:icexmoon/icexmoon-tree.git</connection><developerConnection>scm:git:git@github.com:icexmoon/icexmoon-tree.git</developerConnection><url>https://github.com/icexmoon/icexmoon-tree</url>
</scm>

发布

执行命令:

mvn deploy
  • 如果遇到各种编译问题,可以查看 mvn 使用的 JDK 和默认的 JDK 是否一致,比如mvn -vjava -version
  • 遇到其它的坑可以询问 AI

上传 jar 包成功后还需要在中央仓库的网站上点击 pubulish 按钮进行发布。

image-20250524181037592

参考资料

  • Central Publisher Portal Guide - Documentation
http://www.xdnf.cn/news/8541.html

相关文章:

  • Baklib构建企业CMS高效协作与安全管控体系
  • 开源视频监控前端界面MotionEye
  • Java基础 Day19
  • python web开发-Flask模板引擎Jinja2完全指南
  • AI扫描王APP:高效便捷的手机扫描工具,让生活更智能
  • yum命令常用选项
  • redis使用RDB文件恢复数据
  • 计算机网络学习20250524
  • vs2022 Qt Visual Studio Tools插件设置
  • WPF按钮Radius化
  • DAY01:【ML 第二弹】高等数学
  • Java 函数式接口(Functional Interface)
  • Disruptor—2.并发编程相关简介
  • HarmonyOS实战:高德地图定位功能完整流程详解
  • 《Spark/Flink/Doris离线实时数仓开发》目录
  • Linux目录介绍+Redis部署(小白篇)
  • 基于大模型的髋关节骨关节炎预测与治疗方案研究报告
  • client.chat.completions.create方法参数详解
  • 指令集架构、微架构、厂商对应关系
  • 浏览器强缓存还未过期,但服务器资源已经变了怎么办?
  • 打破产品思维--启示录:打造用户喜欢的产品--实战6
  • 动静态库--
  • 软件开发MVC三层架构杂谈
  • Android-OkHttp与Retrofit学习总结
  • 【疑难杂症】Vue前端下载文件无法打开 已解决
  • WebAssembly:开启跨平台高性能编程的新时代
  • 游戏引擎学习第309天:用于重叠检测的网格划分
  • 后端开发概念
  • 独立机构软件第三方检测:流程、需求分析及电商软件检验要点?
  • SystemUtils:你的Java系统“探照灯“——让环境探测不再盲人摸象