Maven 中央仓库操作指南

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)中用以下命令检查有没有生效:

powershell 复制代码
Resolve-DnsName yourdomain.com -Type TXT

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

验证

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

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

验证 OK 后就会显示:

用户令牌

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

生成令牌

账户管理页面生成令牌:

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

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

在 Maven 中使用令牌

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

xml 复制代码
<server>
    <id>central</id>
    <username>{token-name}</username>
    <password>{token-password}</password>
</server>

GPG 密钥

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

生成密钥

生成 GPG 密钥:

bash 复制代码
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 的密钥服务器:

bash 复制代码
gpg --keyserver keyserver.ubuntu.com --send-keys 4AA37B595F7B7F26

maven 配置

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

xml 复制代码
<profile>
    <id>ossrh</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>{password}</gpg.passphrase>
    </properties>
</profile>

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

不要忘了让配置生效:

xml 复制代码
<activeProfiles>    <activeProfile>ossrh</activeProfile>
</activeProfiles>

发布

发布插件

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

xml 复制代码
<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>

添加插件依赖:

xml 复制代码
<dependency>
    <groupId>org.sonatype.central</groupId>
    <artifactId>central-publishing-maven-plugin</artifactId>
    <version>0.7.0</version>
    <scope>provided</scope>
</dependency>

打包插件

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

xml 复制代码
<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 进行签名,需要添加插件:

xml 复制代码
<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 文件中表明:

xml 复制代码
<!-- 项目描述 -->
<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>

发布

执行命令:

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

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

参考资料

相关推荐
程农18 小时前
基于Java的报名系统
java·开发语言
yugi98783819 小时前
基于字典缩放的属性散射中心参数提取MATLAB仿真程序
开发语言·matlab
小白学大数据20 小时前
绕过拼多多 App 反抓包机制的综合逆向解决方案
开发语言·爬虫·python·自动化
使者大牙20 小时前
【单点知识】 Python装饰器介绍
开发语言·数据库·python
带土120 小时前
2. C++ private、protected、public
开发语言·c++
Jackson@ML20 小时前
2026最新版Sublime Text 4安装使用指南
java·python·编辑器·sublime text
我不是8神20 小时前
字节跳动 Eino 框架(Golang+AI)知识点全面总结
开发语言·人工智能·golang
毕设源码-朱学姐20 小时前
【开题答辩全过程】以 校园闲置物品交易平台的设计与实现为例,包含答辩的问题和答案
java·eclipse
古城小栈20 小时前
Rust复合类型 四大军阀:数、元、切、串
开发语言·后端·rust
chilavert31820 小时前
技术演进中的开发沉思-326 JVM:内存区域与溢出异常(上)
java·jvm