先前都是配置pom.xml从Maven中央仓库下载依赖包,幻想着哪一天咱也有个包可以让别人自动下载啊,好高大上的感觉。
现已成功利用Sonatype OSSRH将fuzhutech-ueditor
提交给Maven的中央仓库。特发表此文以做纪念。对于我这样的新手而言,第一次发布项目到中央仓库,真不是一件容易的事情,所以很有必要整理步骤并说明一下在发布过程中遇到的一些问题。
一、注册账号
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
注册后将信息保存到maven的conf/settings.xml中
<servers>
<server>
<id>oss</id>
<username>用户名</username>
<password>密码</password>
</server>
</servers>
二、创建工程单
创建地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134,或者点击首页的中上部“Create”按钮。
该步骤字面意思就是Create 一个 issue
,我们要New 一个 Project
(提出一个发布申请)。实质就是申请并占有坐标Group Id。我的Issue,https://issues.sonatype.org/browse/OSSRH-31467,参考说明各项字段内容:
- Project:Community Support – Open Source Project Repository Hosting (OSSRH)
- Issue Type:New Project
- Summary:add a new project to the repository
备注:随意写即可,仔细观察发现大家写的啥都有 - Description:Various open source project,fuzhutech.com is my own domain.thank you!
备注:可不填,有的声明own domain,但系统还是会让你确认是否拥有。 - Group Id:com.fuzhutech
备注:比较关键,系统会推荐是否选择com.github.fuzhutech - Project URL: https://github.com/fuzhutech/fuzhutech-ueditor
备注:项目的站点,据实填写即可 - SCM url:https://github.com/fuzhutech/fuzhutech-ueditor.git
备注:据实填写,后续pom配置中也会用到
其他的就没有什么了,提交之后就等工作人员离开确认吧,有时候工作人员会问你些你没有明确的内容,只需要回答就好。
大概30分钟,系统自动回复
Do you own the domain fuzhutech.com? If not, please read:
http://central.sonatype.org/pages/choosing-your-coordinates.html You
may also choose a groupId that reflects your project hosting, in this
case, something like io.github.fuzhutech or com.github.fuzhutech
我提交了,提交一条Comment
Yes, we own the domain fuzhutech.com.
第二天收到回复,审批初步通过了。
Configuration has been prepared, ……
三、上传前的准备
在等待Issue的过程中,需要准备GPG以便对发布的文件进行签名。小编直接在http://www.gpg4win.org/downlo… 下载Gpg4win-Vanilla
版来使用。
1. 查看是否安装成功
gpg --version
能够显示 GPG 的版本信息,说明安装成功了。
2. 生成密钥对
gpg --gen-key
此时需要输入realName、Email、Comment等字段,其它字段可使用默认值,此外,还需要输入一个 Passphase,相当于一个密钥库的密码,最好记下来,因为后面会用到。
3. 查看公钥
gpg --list-keys
输出如下信息:
pub 2048R/DEF22C2D 2017-05-23
uid [ultimate] fuzhutech (fuzhutech) <fuzhutech@163.com>
sub 2048R/A8C6E2E2 2017-05-23
这里的公钥的 ID 是:DEF22C2D。
4. 将公钥发布到 PGP 密钥服务器
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys DEF22C2D
此后,可使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。
5. 查询公钥是否发布成功
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys DEF22C2D
从key server
上通过公钥 ID 来接收公钥,此外,也可以到sks-keyservers.net
上通过公钥 ID 去查询。后续OSS进行签名验证成功的前提就是公钥发布成功。
6. 在settings.xml中配置gpg的签名
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!--gpg.keyname>DEF22C2D</gpg.keyname-->
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>the_pass_phrase</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>ossrh</activeProfile>
</activeProfiles>
the_pass_phrase
配置的是生成密钥对时输入的Passphase
。
四、配置pom.xml
pom.xml
在Maven中央库的审核比较严格,必须有固定的一些字段,包括:name、description、url、licenses、developers、scm 等基本信息。
具体这个文件我就不贴了,请查看我的pom做参考:https://github.com/fuzhutech/…。
distributionManagement
则是定义了release
和snapshot
发布的地址,这个在Issue通过审核后工作人员会给你,还有就是snapshotRepository
与 repository
中的 id 一定要与 setting.xml
中 server
的 id
保持一致。
因为这些执行通常都独立于标准构建流程,所以把他们移动到一个profile,发布需要的source插件、javadoc插件、gpg插件都在这个profile里,这样只有在发布的时候才会生成源码包、文档API包和做gpg签名。
五、上传到OSS
待项目编写完成,就可以进行上传、发布了。在命令行进入项目pom.xml
所在路径,执行命令提交到OSS服务器。
1.提交一个snapshot版本,修改version加一个-SNAPSHOT:
mvn clean deploy
2.发布一个release版本,修改version 不要加-SNAPSHOT
mvn clean deploy -P release
可以手动修改,也可以执行mvn versions:set -DnewVersion=1.0.0
注意:此时上传的构件并未正式发布到中央仓库中,只是部署到 OSS 中了,下面才是真正的发布。
六、在OSS中发布
上传成功后需要在OSS系统中对操作进行确认,登录https://oss.sonatype.org/,在左边菜单找到“Staging Repositories”
,点击,在右边上面一点有一个输入搜索框输入你的groupid
进行快速定位,可以发现这时你的构件状态是“open”
,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”
按钮,在弹出框中“confirm”
。
接下来系统会自动验证有效性,如果你的Group Id
和pom.xml
没有错误,状态会自动变成closed
,如果有问题,会在下面提示你那里有问题,加入有问题你可以点击drop
按钮删掉这个构件,修改后重新执行步骤五。
成功后状态会变为“closed”,点击release按钮发布。
七、通知sonatype首次发布
回到issue系统,找到你的那个申请的issue,写个comment,I promoted my first release, thanks
,说明首次发布完成了,等待他们审核。
审核通过后我们就可以在中央库搜索到我们的GroupId!搜索的地址是: http://search.maven.org/
八、感谢
成功的发布离不开各个前台帖子的指导,虽然我没有按照帖子一步成功,但我希望可以帮助一些人少走一些弯路,小白不易,且行且珍惜。