type
status
date
slug
summary
tags
category
icon
password
js
这几天琢磨这把自己的工具箱发布到了Maven中央库,过程有点曲折,花了4天多,终于搞定了。
其实总结下来发布的过程是与Sonatype工作人员交互的过程,这个过程是在Sonatype的JIRA平台上完成的,过程如下:
- 注册
- 提交一个issue(提出一个发布申请),告诉工作人员我要创建一个构件。
- 等待工作人员审批,会给你发邮件,在这个issue下给你comment说明通过或者哪里有问题。
- 上传构件
- 发布构建,并在哪个issue下告诉工作人员我发布了
- 等待审核,如果通过会告诉你需要release一下并在issue上告诉工作人员我release了
- 发布成功
由于审核人员和我们这有时差,所以要加速的话,可以考虑在23点以后提交审批,这样得到回复也能比较快。不想熬夜的小伙伴就安心睡觉吧,第二天醒来,开开心心地查看自己的邮箱。
一、注册帐户
要注意两点:
- Email一定要选择收的到的邮箱,所有进度通知都会发到这个邮箱里
- "Username"一定要用英文注册,因为他们的中央库系统不支持中文用户名,不然审核人员会让你重新注册一个账号。
二、创建一个 Issue
"Project"一定要选 "Community Support - Open Source Project Repository Hosting (OSSRH)"
"Issue Type"选 "New Project"
然后点下一步
"Summary" 填项目名称,尽量用英文
"Group Id" 要和项目的group id 相同,这里要特别注意,然后你有自己的域名,可以使用域名作为GroupId,比如我的GroupId就是"cn.reinforce";如果没有的话,就用代码托管站点的域名,比如:com.github.XXX
都填完以后点击“Create”,然后就等待官方人员审核了。如果是用的自己的域名,审核人员会让你验证域名的所有权。
我选择了TXT验证,很快就通过了,不过因为一开始注册的用户名是中文的,无法录入到系统,要求重新注册,然后使用新账号,在当前Issue下发一条评论。
通过审核后,会受到这样的消息:
在这之后,就可以开始提交我们的项目了。
三、生成GPG密钥(默认RSA算法即非对称加解密公私钥对)
需要下载一个GPG 来进行文件加密,windows 可以到地址 https://www.gpg4win.org/download.html 下载 按照步骤安装即可。
在安装目录的bin下打开Kleopatra即可
Windows操作系统下使用界面即可。最后输入密码即可
发布公钥(创建完成在界面最后面即可看到密钥ID) (Windows在CMD中进行)
1 | gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 密钥ID |
查看公钥(能查看的到的话,就说明成功上传了,刚上传会有一定延迟)
1 | gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 密钥ID |
四、准备上传
1. 安装Maven环境
Linux直接使用对应的命令安装,这里只介绍Windows下的方法.
(1)安装JDK,推荐1.8版本
(2)前往Maven官网下载zip包,地址:http://maven.apache.org/download.cgi
(3)解压到你想要的文件夹
(4)配置环境变量,"MAVEN_HOME"和"PATH"
(5)验证
在CMD中输入“mvn -version”,出现下图就是配置成功了
2. 修改Maven的settings.xml文件
注:settings.xml在.m2文件夹下
这里的id要与pom中snapshotRepository repository2个节点的id一致 且与plugins中org.sonatype.plugins中配置的configuration-serverId一致
username&password 配置是https://issues.sonatype.org/和https://oss.sonatype.org/网站的用户名和密码,一般情况下默认是一致的
1234567891011 | < settings > ... < servers > < server > < id >oss</ id > < username >用户名</ username > < password >密码</ password > </ server > </ servers > ...</ settings > |
pom.xml在Maven中央库的审核比较严格,必须有固定的一些字段,还有发布的构件必须包含字节码jar、源码jar、文档jar,这些都可以通过maven插件搞定,具体这个文件我就不贴了,请查看我的pom做参考:
其中必须字段是:
1. name
2. description
3. url
4. licenses
5. developers
6. scm
这里我按照原博客的方法,把发布限制在了一个profile里(Profile理解为一个构建行为的配置,每种行为对应一个profile,例如线上、测试的某些配置不同,就可以分为不同的profile执行,如果你还不明白就自行百度吧~),发布需要的source插件、javadoc插件、gpg插件都在这个profile里,这样只有在发布的时候才会生成源码包、文档API包和做gpg签名。distributionManagement则是定义了release和snapshot发布的地址,这个在Issue通过审核后工作人员会给你,还有就是snapshotRepository 与 repository 中的 id 一定要与 setting.xml 中 server 的 id 保持一致。
五、发布到OSS
打开CMD,切换到项目所在目录,输入以下命令:
1 | mvn clean deploy -P release |
正常情况下,会弹出一个输入框,要求输入之前生成的那个证书的密钥。如果没有弹出,可以在命令里加个参数:
1 | mvn clean deploy -P release -Dgpg.passphrase=你的Passphase |
(1)自动
如果你的pom文件的插件配置和我一样的话,等命令跑完,已经自动帮你发布完了。
(2)手动
如果没有自动close的话,进入https://oss.sonatype.org并登陆,会在左侧有个staging Repositories点击进入,在右侧面板找到你的构件,状态应该是open,你要将其置为closed,点击上方的close按钮即可。
接下来系统会自动验证有效性,如果你的Group Id和pom.xml没有错误,状态会自动变成closed,如果有问题,会在下面提示你那里有问题,加入有问题你可以点击drop按钮删掉这个构件,修改后重新执行步骤7。
接下来你需要点击release按钮发布你的构件。
六、在Issue中通知工作人员
回到Issue,发一句表名发布完成了。等待他们审核。审核通过后我们就可以在中央库搜索到我们的构件了。这里成功后,同步到各个搜索Maven的网站还要一段时间,我大约等了一个小时,search.maven.org上搜索得到了。
七、总结
总的弄下来还是很有成就感的,很有大公司的赶脚→_→,这只是一个个人用的工具,后续还会有几个通用工具包。
小伙伴们在使用过程中有任何问题,请在评论区留言欧。
- 作者:吕行者
- 链接:https://www.lvy.life/article/2019/02/01/1761f2f0-5182-8040-aa13-ff9e248ccddf
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。