前言
我们知道在 maven 中引入第三方 jar 包是非常简单的,只需要使用 groupId+artifactId+version 就能从 maven 仓库中下载下来对应的 jar 包。
例如:引入 fastjson 的 jar 包
1 | <dependency> |
那如果想要发布自己的 jar 包到 maven 仓库应该如何操作呢。
创建 issue
要发布 jar 包到 maven 仓库首先需要人工审核,在审核过了的话才可以进行后续发布 jar 包的操作。首先需要在https://issues.sonatype.org/secure/Dashboard.jspa上注册一个账号,登录之后点击Create,在弹出来的界面中填写响应的信息
- Project 选择 Community Support,Issue type 选择 New Project。
- 注意 Group Id,如果有对应域名的话则使用域名对应的 Group Id(例如 netty 项目的域名是 netty.io,则 Group Id 为 io.netty),没有的域名的话最好就填com.github.xxx,因为在 issue 里会有人问你是否拥有 Group Id 对应的域名,没有的话是审核不过的,而托管在 github 上的话就可以直接使用 github 的域名来完成审核。
issue 审核
创建成功后等 1-2 个小时左右就会有工作人员评论 issue,问你是否持有域名。
如果是用com.github.xxx的 Group Id,就回复要使用com.github.xxx作为你的域名,否则有域名就回复有就好,接着等待工作人员确认(我等了一天),确认成功之后 issue 的状态就会变成RESOLVED
,这个时候就有资格上传 jar 包到 maven 仓库了。
gpg 管理密钥
在上传 jar 包之前,先要生成 gpg 工具生成 RSA 密钥对,并把公钥上传到公共密钥服务器,这样在发布 jar 包的时候能校验用户的身份。
- 下载 gpg 工具,下载地址:https://www.gnupg.org/download/index.html,下载对应操作系统的版本然后进行安装。
- 验证安装和上传生成的公钥
验证 gpg 是否安装成功
1
gpg --version
生成 RAS 密钥对
1
gpg --gen-key
接着需要填写名字和邮箱等等基本信息,这些都不是重点,最主要的是有个
Passphase
的选项在填完之后记下来,到时候发布 jar 包的时候要用到。查看生成的密钥,并上传至密钥服务器
需要上传到服务器的就是 pub 里的公钥串FC27E7C61FC5D176DD7F67198C6EFA8E944CD6BA
。1
gpg --list-keys
1
2
3
4
5----------------------------------------------
pub rsa2048 2018-07-19 [SC] [expires: 2020-07-18]
FC27E7C61FC5D176DD7F67198C6EFA8E944CD6BA
uid [ultimate] liwei <liwei2633@163.com>
sub rsa2048 2018-07-19 [E] [expires: 2020-07-18]上传公钥至密钥服务器,国内我测试了的服务器基本就这个
hkp://keyserver.ubuntu.com:11371
能用。1
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys FC27E7C61FC5D176DD7F67198C6EFA8E944CD6BA
上传完后验证是否成功
1
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --receive-keys FC27E7C61FC5D176DD7F67198C6EFA8E944CD6BA
验证成功
1
2gpg: Total number processed: 1
gpg: unchanged: 1
maven 配置
- 修改项目中的
pom.xml
文件,添加部署相关配置,这里引用贴下我的配置,只需要替换下相应的内容就好。
1 | <name>pdown-core</name> |
- 把之前创建 issue 时注册的账号配置到 maven 的配置文件里,找到 maven 安装目录下
conf/setting.xml
文件,在<servers>
标签里添加。
1 | <server> |
把用户名和密码填好即可。
部署 jar 包
- 使用下面的命令行,会需要输入之前用 gpg 生成密钥时输入的 Passphase,也有可能会弹窗出来提示输入 Passphase。
(我这加了-Dgpg.passphrase=YourPassphase 选项并没有生效,还是会弹窗出来提示输入 Passphase)
1 | mvn clean deploy -P release -Dgpg.passphrase=YourPassphase |
- 如果部署成功的话使用创建 issue 的帐号登录这个网址https://oss.sonatype.org/,然后看图操作。
- close 完了系统会验证 jar 包,点击刷新可以看到最新的进度,当全部验证通过的时候,状态会变成
closed
,然后再选中文件Release
就发布完成了。然后等个几个小时就可以在中央仓库搜索到自己发布的 jar 包了。