注册 Maven 账号
首先我们需要有一个 Maven 账号用来发布自己的 jar 包,打开 Maven 仓库官网,注册一个账号,这里推荐使用 GitHub 登录,使用 GitHub 登录可以后会自动获得一个命名空间,其余方式则要创建仓库验证,这里用 GitHUb 登录来做演示
命名空间
命名空间用于做项目的唯一标识服,最常见的就是 io.github.xx
,相信各位都在 POM 中见过不少 groupId 都是以这种形式开头的。下面我们就需要查看自己的命名空间。
GitHub 登录后,点击右上角的 Publish
在 Namespace
即可看到自己的默认空间,并且是已经经过验证的,我们就用这个命名空间来发布我们的 jar 包。

生成 用户 token
有了命名空间后,我们还需要 用户 token,token 用来部署时的认证,所以要把 token 保管好,不要泄露出去。
点击个人头像,继续点击 View Account
,在新页面中,点击 Generate User Token
,获得自己的 token。复制好保存在一个地方。

生成的 token 格式如下:
1 2 3 4 5
| <server> <id>你的自定义id</id> <username>你的用户名</username> <password>生成的 token</password> </server>
|
其中 id 是可以自定义的,这里自定义后要记住,后面在 POM 的 distributionManagement
标签内也会用 id,和这里的 id 要对应。
配置 用户 token 到 maven
将刚刚得到的用户 token 复制到 maven 的 settings.xml
文件内,注意放在 servers 标签内!!
文件加密
在 Maven 仓库发布,必须要用到 GPG 加密
,算是一个强制要求,防止包被篡改,同时验证发布者的身份。
下载 GPG
GPG 加密下载,进入网站后,我们下载 GPG 工具
windows:下载 Gpg4win
mac:下载 Mac GPG 或者 直接通过 homebrew 下载,brew install gnupg
linux:通过命令下载:sudo apt-get install gnupg

密钥的生成与发布
下面需要生成密钥,都通过控制台生成就行了,mac 如果选择安装 GOG 程序,会弹出可视化界面,不用管,直接关掉用控制台。windows 注意进入环境下打开 cmd 再操作,具体路径为 {安装位置}/GunPG/bin
。
开始生成密钥,会让你输入名字、邮箱和密码,名字就输入你的命名空间(例如命名空间为 io.github.soora33,名字就输入 soora33 ),邮箱和密码就自己设置,这里和上一步 Maven 的用户 token 是没有关系的,但要记住,后面部署的时候是要再次输入 GPG 密码的。
1 2 3
| # 生成密钥 gpg --gen-key # 输入名字、邮箱、密码
|
生成完成后,查看自己的密钥 key
1 2
| # 查看所有的密钥 gpg --list-keys
|
uid 就是你自己设置的名字,找到对应的记录,并记录 key,例如我的名字就是 soora33,key 是以 18A 开头的那个。

下面需要将公钥发布到服务器
1 2 3 4
| # 将key发布到公钥服务器 gpg --keyserver keyserver.ubuntu.com --send-keys 你的key # 验证是否发布成功 gpg --keyserver keyserver.ubuntu.com --recv-keys 你的key
|
如果返回的是这种类型的信息,则表示发布成功

将自己的项目开源
很简单,因为你要发布到 Maven 中央仓库,所以项目需要开源,在 GitHub 上创建仓库并公开就好了。
编写 POM 文件
最后,我们要在 POM 文件中加入我们的一些基本信息,注意,一定要全部配置,否则会上传失败,下面是一个示例,示例中我把 Github 的用户名全部替换为了 username,这个是你对应仓库的 username ,如果不知道自己的 username,就去看自己的仓库 url,仓库名前面的就是 username
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>io.github.username</groupId> <artifactId>your-project</artifactId> <version>1.0.0</version>
<name>项目名称</name> <description>项目描述</description> <url>https://github.com/username/your-project</url>
<licenses> <license> <name>The Apache License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses>
<developers> <developer> <name>你的名字</name> <email>你的邮箱</email> </developer> </developers>
<scm> <connection>scm:git:git://github.com/username/your-project.git</connection> <developerConnection>scm:git:ssh://github.com:username/your-project.git</developerConnection> <url>https://github.com/username/your-project</url> </scm>
<dependencies> </dependencies>
<build> <plugins> <plugin> <groupId>org.sonatype.central</groupId> <artifactId>central-publishing-maven-plugin</artifactId> <version>0.6.0</version> <extensions>true</extensions> <configuration> <publishingServerId>你的 用户 token 设置的id</publishingServerId> <autoPublish>true</autoPublish> </configuration> </plugin>
<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> <configuration> <doclint>none</doclint> </configuration> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
<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> </plugins> </build>
<distributionManagement> <snapshotRepository> <id>你的 用户 token 设置的id</id> <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> <repository> <id>你的 用户 token 设置的id</id> <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement>
</project>
|
发布 jar 包
部署
完成 POM 文件的编写后,我们可以在 IDE 中点击 clean
,再点击 deploy
。先将项目先清空旧的打包代码,在重新编译测试打包等一系列操作,最后推送到 maven 的中央仓库
如果没有这个界面,可以直接在项目控制台中输入 mvn clean deploy

推送
如果配置没问题,控制台打印成功日志后,那么你只需要在 maven 仓库页面,点击 Publish
,再点击 Deployments
,可以看到刚刚打包成功的任务,状态应该是在推送,显示 PUBLISHING
,等 10 分钟左右就可以看到状态变为已推送

在官网也已经可以搜索到了

致谢
最后本人是先按照如何发布 jar 包到 maven 中央仓库(2024 年 3 月最新版保姆级教程)这篇教程去走了一遍,成功后,升级插件版本到最新并修改了一些标签语法,修改了 POM 内的一些东西,做了一些改进完成了本篇,这里感谢原作者。