发布 jar 包到 maven 中央仓库
1. 环境
在网上找的很多文章中写得都有很多问题,这里记录一下最近一次成功地发布 jar 包到 maven 中央仓库的过程。并附带上每一个步骤官方的指导链接。
系统:mac(windows 系统在下载辅助工具时不太一样,在配置上和 mac 系统没有区别)
IDE:IntelliJ IDEA
JDK:1.8
maven:3.8.1(IDEA 自带的版本)
代码:上传到 github 上(使用 gitee 也行)
发布形式:以 jar 包发布 release 版本(非 SNAPSHOT 版本)
2. 项目配置
官方对发布的项目做了一些必需的要求,如果不按要求来,发布可能会报错。
2.1. javadoc 和 source
以非pom
方式打包的项目(pom.xml
配置文件中可以通过标签配置打包方式,默认就是jar
),在打包完成后,target
目录下必须要包含***-sources.jar
和***-javadoc.jar
。如下图:
为了达成以上效果,需要在 pom.xml 中依赖两个插件:
参考:https://central.sonatype.org/publish/requirements/#supply-javadoc-and-sources
2.2. 使用 GPG/PGP 签署文件
打包完成后,target
目录下必须要包含***.jar.sac
。如下图:
为了达成以上效果,需要在 pom.xml 中依赖插件(加完插件不要急着构建,还要下载 GPG 生成密钥,后面会说):
参考:https://central.sonatype.org/publish/requirements/#sign-files-with-gpgpgp
2.3. 项目名称和版本配置
groupId:使用正确的反向域名。如果有私人域名,可以配置成私人域名(后面配置起来比较麻烦)。如果没有私人域名,可以直接使用 github 的域名:
io.github.{account}
(gitee 同理,推荐使用这种方式,account
是 github 注册的登录账号)。
artifactId:项目名称,可以随意发挥。
version:版本,可以使用
1.1.1
这种格式,不推荐带-SNAPSHOT
,快照版本不会直接发布到中央仓库。
参考:https://central.sonatype.org/publish/requirements/#correct-coordinates
2.4. 项目名称、描述和 URL
这个是为了增加可读性。
name:推荐使用这种格式:
<name>${project.groupId}:${project.artifactId}</name>
,当然也可以自定义。
description:项目描述,自己发挥。
url:项目地址,直接使用 github(或 gitee)上项目的地址即可。
参考:https://central.sonatype.org/publish/requirements/#project-name-description-and-url
2.5. 许可证书
可以使用 Apache/MIT 的许可证书,直接拷贝下面的即可:
参考:https://central.sonatype.org/publish/requirements/#license-information
2.6. 开发人员信息
留你自己的艺名和邮箱:
参考:https://central.sonatype.org/publish/requirements/#developer-information
2.7. SCM 源码管理系统信息
可以使用 github(或 gitee)的项目地址。
参考:https://central.sonatype.org/publish/requirements/#scm-information
2.8. 文件签名校验(非必需)
官网说必需要包含.md5
和.sha1
签名校验文件,但我没有特地去配置这个,也是可以发布的。可以跳过这一步。
参考:https://central.sonatype.org/publish/requirements/#provide-files-checksums
3. 在 JIRA 上提发布申请
3.1. 注册 JIRA
点击如下链接注册账号并登录,如果有账号直接登录即可:https://issues.sonatype.org/secure/Signup!default.jspa
参考:https://central.sonatype.org/publish/publish-guide/#initial-setup
3.2. 创建项目
点击新建
,按照下面的图示来填写:
groupId:要和项目里对应上,必须是一个可用的域名的反转字符串,如果项目是放在 github 上,必须使用
io.github.{account}
的格式,否则会审核不通过(注意:不能使用com.github
)。
Project URL/SCM url:直接使用 github 的项目地址即可。
3.3. 查看刚刚创建的项目
正常情况下创建好默认就会进入刚刚创建的项目,如果进不去,可以按照路径项目-查看所有项目-类别-Central
即可看到项目链接,点进去后,切换筛选器我的报告
就能看到创建的项目了。
3.4. 在 github 中创建一个空项目
创建好的项目,会分配一个唯一标识OSSRH-***
(见上图),需要用这个标识去 github 上创建一个空项目,这个是为了向核审管理员证明需要发布的 github 项目确实是你自己的项目。
3.5. 等待管理员审核
管理员都在国外,因为时差,一般隔天才会核审通过。没办法,耐心等着吧。审核通过后,会发邮件(邮箱就是注册 JIRA 的那个),也会在 JIRA 项目下出现活动日志。
4. 获取 GPG 密钥
在等待 JIRA 项目审核的同时,可以并行把 GPG 密钥搞定。注意:mac 系统和 windows 系统在获取 GPG 密钥时有些区别,mac 全程都是通过命令行搞定的,而 windows 提供了操作界面,可能会方便一点。这里只介绍 mac 系统的配置方式,windows 系统可以自行搜配置教程。
4.1. 安装 GnuPG
用下面的链接下载 GnuPG,选择系统对应的版本。
https://gnupg.org/download/index.html#sec-1-2
验证安装是否成功
使用gpg --version
命令来验证,如果输出了版本则说明安装成功。
参考:https://central.sonatype.org/publish/requirements/gpg/#installing-gnupg
4.2. 生成密钥对
使用命令gpg --full-generate-key
生成密钥对,2 年内有效。执行命令后,需要输入姓名和邮箱(建议和注册 JIRA 时用的一致),然后输入o
(注意是字母 o)确认生成。随后会提示输入一个passphrase
口令来保护你的密钥对,这个口令要记住,后面配置需要使用。注意:这个命令不建议执行多次,不然生成了多个密钥对,发布时还要去配置使用哪个密钥对,比较麻烦。
参考:https://central.sonatype.org/publish/requirements/gpg/#generating-a-key-pair
4.3. 发布公钥
使用命令
gpg --keyserver pgp.mit.edu --send-keys 公钥
来发布。
官网提供了 3 个地址,有的地址可能不能用,上面这个地址亲测有效。(所以官方也不一定靠谱)
使用命令
gpg --keyserver pgp.mit.edu --recv-keys 公钥
验证是否发布成功。
注意:验证的命令要等一会执行才能响应数据,估计发布可能有点延时,可以多执行几次。反正如果响应如图所示,就代表发布成功了。
参考:https://central.sonatype.org/publish/requirements/gpg/#distributing-your-public-key
5. JIRA 项目核审通过后的配置
5.1. 仓库地址
核审通过后,在 JIRA 上的项目里可以看到日志,这代表项目已经拥有发布权限了。下图标记出来的就是仓库地址。
5.2. 修改 maven 配置
这里修改的是
maven
的setting.xml
配置文件,如果不知道配置文件在哪里(那么你不是一个合格的程序猿),可以在IntelliJ IDEA
的settings > Build,Execution,Deployment > Builds Tools > Maven
页面找到User settings file
。
配置 JIRA 账户用于发布
这里的
<server>-<id>
是有用的,一会要在项目的 pom 文件配置中要对应上。
配置 GPG 用于文件签署校验
前文
2.2
小节已经在项目中配置了 GPG 插件了,这里要配置 GPG 的口令才能进行正常的签署。
前文
4.2
小节生成 GPG 密钥对的时候,输入过一个口令passphrase
,就用那个。
5.3. 配置仓库地址和插件
这里是在项目的 pom 文件中配置。
配置发布的仓库地址
这里的仓库域名,可以从 JIRA 项目的日志里看到,核审通过后会给你一个地址,就用那个做为域名。按照下面的格式来配:
6. 发布
JIRA 核审通过后,就可以发布了
6.1. 发布到中央仓库
可以直接在
IntelliJ IDEA
中点击deploy
来发布:
输出如下结果说明发布成功了:
6.2. 验证发布结果
发布成功以后,并不能立刻在 maven 中央仓库中搜索到,大概隔一天以后才能搜索得到,所以不要心急,耐心等待。
JIRA 上的回应
执行完发布动作以后,大概隔了几分钟以后,JIRA 项目下会多出一条日志:
这条日志给出了两个地址和两个时间,反正差不多要等个那么长的时间才能搜得到。我已经发布到中央仓库里了,第一个地址里还是找不到,但是第二个地址里能搜到:
下面这个地址好像是执行完发布操作后,过一会就能搜得到,可以试试:https://s01.oss.sonatype.org/content/groups/public/
在中央仓库里搜索
一般是隔天,才能在中央仓库里搜得到,在阿里云的仓库里也可以搜得到,阿里云本来就是从中央仓库同步的。
建议使用groupId
来搜,一搜一个准。用artifactId
来搜在第一页可能找不到,因为maven
会对搜索结果做排序。
7. 彩蛋
JAVA_HOME 报错
如果遇到这样的报错The environment variable JAVA_HOME is not correctly set
,不要慌,一般是因为你本地环境变量没有设置JAVA_HOME
或者设置成了jre
的目录。如果是因为前者可以去设置一下JAVA_HOME
,如果是因为后者,可以把 JAVA_HOME 的目录改成jdk/bin
的目录,或者可以改一下项目的 pom 配置文件:
文章转载自:是秃子迟早会发光的
评论