将项目发布到Maven中央仓库

先前都是配置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/download.html 下载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/fuzhutech-ueditor/blob/master/pom.xml

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/

八、感谢

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容