先前都是配置pom.xml从Maven中央仓库下载依赖包,幻想着哪一天咱也有个包可以让别人自动下载啊,好高大上的感觉。

现已成功利用Sonatype OSSRH将fuzhutech-ueditor提交给Maven的中央仓库。特发表此文以做纪念。对于我这样的新手而言,第一次发布项目到中央仓库,真不是一件容易的事情,所以很有必要整理步骤并说明一下在发布过程中遇到的一些问题。

一、注册账号

官方网站:http://www.sonatype.org/

注册地址: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则是定义了releasesnapshot发布的地址,这个在Issue通过审核后工作人员会给你,还有就是snapshotRepositoryrepository 中的 id 一定要与 setting.xmlserverid 保持一致。

因为这些执行通常都独立于标准构建流程,所以把他们移动到一个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 Idpom.xml没有错误,状态会自动变成closed,如果有问题,会在下面提示你那里有问题,加入有问题你可以点击drop按钮删掉这个构件,修改后重新执行步骤五。

成功后状态会变为“closed”,点击release按钮发布。

七、通知sonatype首次发布

回到issue系统,找到你的那个申请的issue,写个comment,I promoted my first release, thanks,说明首次发布完成了,等待他们审核。

审核通过后我们就可以在中央库搜索到我们的GroupId!搜索的地址是: http://search.maven.org/

八、感谢

成功的发布离不开各个前台帖子的指导,虽然我没有按照帖子一步成功,但我希望可以帮助一些人少走一些弯路,小白不易,且行且珍惜。


fuzhutech
1 声望0 粉丝