Maven 中央仓库操作指南
登录注册
在 Maven Central 登录(注册)账号。
添加命名空间
注册
通过右上角用户菜单跳转到命名空间管理页面:
注册命名空间:
填入你拥有的域名并注册:
刚提交的命名空间状态是Unverified
:
需要进行验证。
点击小图标复制验证用的 key 到剪切板:
可以使用代码仓库帐号作为命名空间,此时不需要添加 DNS TXT,中央仓库只需要验证你对应的帐号即可。
支持 Github(io.github.myusername)、Gitee(io.gitee.myusername)等。具体可以查看官方文档。
DNS TXT
需要在你域名的 DNS 解析上添加一个 TXT 文件用于命名空间验证。
不同的 DNS 服务提供商有不同的添加方式,这里的官方文档列出了一些常见的 DNS 服务商的添加方式。
下面以我的 腾讯DNS 为例进行说明。
进入管理后台,添加一个一下的 DNS 记录:
注意,记录值要和上边在中央仓库注册命名空间时候复制的验证密钥(Verification Key)一致。
设置好后需要等一段时间(通常5分钟以上)让 DNS 服务器将配置的 TXT 传播到其他 DNS 服务器,可能需要较长时间。
可以在 PowerShell(Windows)中用以下命令检查有没有生效:
Resolve-DnsName yourdomain.com -Type TXT
也可以通过在线工具Dig(DNS 查询)快速检测。
验证
点击验证按钮进行验证即可。
如果验证失败(DNS 配置错误等原因),会一直显示 Pendding 这个状态,此时可以通过以下操作取消验证,然后重新验证即可:
验证 OK 后就会显示:
用户令牌
中央仓库使用用户令牌(User Token)来发布 jar 包和身份验证。
生成令牌
在账户管理页面生成令牌:
使用后会弹出一个界面,展示已经生成的令牌的用户名和密码,需要自行保存,该弹窗会在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 -v
和java -version
。- 遇到其它的坑可以询问 AI
上传 jar 包成功后还需要在中央仓库的网站上点击 pubulish 按钮进行发布。