文档章节

发布Maven构件到中央仓库

阿信sxq
 阿信sxq
发布于 2014/09/13 22:53
字数 2095
阅读 11319
收藏 69

使用maven有一段时间了,不管你同意与否,我都坚决认定maven是很伟大的软件项目,使用它,可以节约很多时间,特别是和git搭配使用的时候,简直就是绝了,就像川菜的花椒和海椒的搭配一样,无与伦比,用过之后肯定会爱上它的。在我的以前的博客里面有关于怎样使用git(eclipse里面的egit插件)管理项目的说明,下面我就怎样将构件发布到maven的中央仓库进行说明。如果你还不知道什么事maven或者git(及时你的工作不会使用到它们,但是都应该有所了解吧),那真的应该去了解一下了。

这里需要说明的是,我的发布过程是参考了开源中国里面的两篇博客的(@黄勇http://my.oschina.net/huangyong/blog/226738@路小磊http://my.oschina.net/looly/blog/270767),在此向他们表示感谢。

闲话不多说,下面正式开始。

1、注册Sonatype的账户

maven中央仓库是有一个叫做Sonatype的公司在维护的,在发布构件之前需要到https://issues.sonatype.org/secure/Signup!default.jspa 去注册一个账号,记住自己的用户名和密码,以后要用。

同时,还要记住一个地址,将来在查询自己所发布构件状态和进行一些操作的时候要使用,https://oss.sonatype.org/

2、提交发布申请

提交申请,在这里是创建一个issue的形式,创建地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

在填写issue信息的时候,有一些需要注意的地方:

a)   “group id”就是别人在使用你的构件的时候在pom.xml里面进行定位的坐标的一部分,而且尽量应该是你的站点的url倒序,参考java包命名的规范,有时候工作人员会想你确认你是否是这个站点url的拥有者,这里由于我已经购买了songxinqiang.cn域名的所有权,所以我填写的就是“cn.songxinqiang”

b)“project url”这个是项目的站点,一般是用作说明的

c)“SCM url”这个构件的源代码的url,便于别人查看源代码,当然这个得是公网能够访问的,不要是什么内部的svn地址什么的哈,我是用的是开源中国的GIT@OSC,也推荐大家使用

其他的就没有什么了,提交之后就等工作人员离开确认吧,有时候工作人员会问你些你没有明确的内容,只需要回答就好。需要注意的是,这个系统的工作人员是在美国上班的,经过我的等待和观察,他们会在北京时间的22:00开始上班、处理issue,所以在这个时间之前就不要去查询状态了,人家还没有上班呢(我会告诉你,我在上午9:00左右提交了,每个半小时查看一次直到工作人员回复我吗)。

等到工作人员在你创建的issue下面回复你说“配置已经修改……”(还有几个链接)的时候就说明审批已经通过了,你就可以进行构件的上传了。

3、上传之前的准备

在上传构件之前,需要准备GPG以便对发布的文件进行签名。

windows用户到http://www.gpg4win.org/download.html 去下载Gpg4win-Vanilla版来使用,linux的直接安装gpg软件包就行。


gpg --gen-key

需要输入姓名、邮箱等字段,其它字段可使用默认值,此外,还需要输入一个 Passphase,相当于一个密钥库的密码,一定不要忘了,也不要告诉别人,最好记下来,因为后面会用到。


更多的请参考@黄勇 的博客(http://my.oschina.net/huangyong/blog/226738)。


4、配置maven

找你所使用的maven的配置文件<mvn_home>/conf/settings.xml,在配置文件中找到<servers>节点,这个节点默认是注释了的,我们就在这个猪似的外边增加一个<servers>的配置

<servers>
        <server>
            <id>oss</id>
            <username>用户名</username>
            <password>密码</password>
        </server>
    </servers>

这里的id是将来要在pom.xml里面使用的,所以务必记好,用户名和密码就是在Sonatype上面注册的用户名和密码。


5、配置pom.xml

接下来就是重头戏了,pom.xml是一个maven项目的重点配置,一个项目的所有配置都可以由这个文件来描述,文件中的所有配置都有默认值,也就是说所有的配置都是可选配置,但是为了把构件发布到中央仓库,我们必须配置一些关键信息,否则再发布时是不会通过了。

这些必须明确致命的信息包括:name、description、url、licenses、developers、scm等基本信息,此外,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、创建文档包、使用 GPG 进行数字签名。此外,snapshotRepository 与 repository 中的 id 一定要与 settings.xml 中 server 的 id 保持一致。

大家可以直接继承自我的一个配置的构件,然后再自己定义一个坐标就行了,我的构件坐标是:


<groupId>cn.songxinqiang</groupId>
<artifactId>oss-parent</artifactId>
<version>1.0</version>

6、上传构件


待构件编写完成,就可以进行上传、发布了。在命令行进入项目pom.xml所在路径,执行:


mvn clean deploy -P release

在稍后些时候会要你输入gpg密钥库的密码,输入即可完成上传,具体时间取决于网络情况。当然有时候不会弹出输入密码的输入框,只是提示需要输入密码,根据gpg插件的官网解释(http://maven.apache.org/plugins/maven-gpg-plugin/usage.html),需要加上密码作为参数执行命令,即:

mvn clean deploy -P release -Dgpg.passphrase=密码

7、在OSS中发布构件

构建上传之后需要在OSS系统中对操作进行确认,将构件发布,进入https://oss.sonatype.org/使用你的用户名和密码登陆之后,在左边菜单找到“Staging Repositories”,点击,在右边上面一点有一个输入搜索框输入你的groupid进行快速定位,可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知。

等成功后(系统自动进行,很快的),再次登录系统找到你的构件,这是状态已经是“closed”的了,再次勾选,然后点击“close”旁边的“release”,在弹出框中进行“confirm”,稍后结果会通过邮件进行通知。

8、通知sonatype的工作人员关闭issue

回到issue系统,找到你的那个申请发布构件的issue,在下面回复工作人员,说明构件已经发布,待工作人员确认后,会关闭这个issue。

9、使用构件

一切完成后并不可以马上就使用你所发布的issue,得等系统将你的构件同步到中央仓库之后才可以使用,这个时间至少要2个小时,然后就可以在中央仓库的搜索页面(http://search.maven.org/)搜到你的构件啦,

赶快截图,向他人炫耀一下吧。

10、特别说明

上面的系统是不是很繁琐?别担心,这只是第一次使用你的groupid发布构件,经实践证明,第一次成功之后,以后就可以使用你的groupid发布任何的构件了,只需要你的groupid没有变就行,(当然不能发布重复构件哈),不用这么麻烦。

以后的发布流程:

a)构件准备好之后,在命令行上传构建;

b)在https://oss.sonatype.org/ “close”并“release”构件;

c)等待同步好(大约2小时多)之后,就可以使用了



 
 

© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 225
博文 82
码字总数 72407
作品 1
成都
后端工程师
私信 提问
加载中

评论(31)

阿信sxq
阿信sxq

引用来自“小帅帅丶”的评论

Return code is: 401, ReasonPhrase: Unauthorized. 怎么办。id都没错误 issue也是 Resolved状态

引用来自“阿信sxq”的评论

配置文件是否已经正确配置了用户名密码

引用来自“小帅帅丶”的评论

博主有遇到过ReasonPhrase: Forbidden这个错误吗?
还有问题?gpg验证那里看看,有没有发布到服务器
小帅帅丶
小帅帅丶

引用来自“小帅帅丶”的评论

Return code is: 401, ReasonPhrase: Unauthorized. 怎么办。id都没错误 issue也是 Resolved状态

引用来自“阿信sxq”的评论

配置文件是否已经正确配置了用户名密码
博主有遇到过ReasonPhrase: Forbidden这个错误吗?
小帅帅丶
小帅帅丶

引用来自“小帅帅丶”的评论

Return code is: 401, ReasonPhrase: Unauthorized. 怎么办。id都没错误 issue也是 Resolved状态

引用来自“阿信sxq”的评论

配置文件是否已经正确配置了用户名密码
确实是自己密码写错了导致。然而错误变成了ReasonPhrase: Forbidden
阿信sxq
阿信sxq

引用来自“小帅帅丶”的评论

Return code is: 401, ReasonPhrase: Unauthorized. 怎么办。id都没错误 issue也是 Resolved状态
配置文件是否已经正确配置了用户名密码
小帅帅丶
小帅帅丶
Return code is: 401, ReasonPhrase: Unauthorized. 怎么办。id都没错误 issue也是 Resolved状态
limeng32
limeng32
也许你们不信,我踩的最大的一个坑是签名的时候访问不到 gpg.exe ,我试了各种方法都不行,最后依稀记得windows下新写的环境变量要重启才能生效,然后我装完 gpg.exe 后就没重启过电脑……于是重启就好了。
brianway
brianway
问题解决了:
https://issues.sonatype.org/browse/OSSRH-31186,是一个插件的问题,把这个步骤自动化了。
brianway
brianway

引用来自“brianway”的评论

盖楼太长了,这是我version 1.0 release 的pom配置:https://github.com/brianway/webporter/blob/v1.0/pom.xml

你在 https://oss.sonatype.org 的welcome 搜索框或者 artifact search搜索栏输入 brianway 应该也能搜到我的上传的包,应该是传上去了,但不在 staging repo 里,不知道啥情况

引用来自“阿信sxq”的评论


com.github.brianway
webporter-collector-zhihu
1.0

是这个吗,已经release了啊,在中央仓库里面都能够看到了啊

引用来自“brianway”的评论

对,就是这个!这就好了吗?

可是我没有走到你文中提到的步骤的啊,[在左边菜单找到“Staging Repositories”,点击,在右边上面一点有一个输入搜索框输入你的groupid进行快速定位,可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知]

上面的步骤我没走过啊。。。为啥

引用来自“阿信sxq”的评论

这个就不知道了
哎,好伤。google 了半天,感觉别人都没遇到这个问题。找不到 staging repo 就不能 close 和 release,流程走不完就不能关闭 issue,我已经在 issue 里求助 Central OSSRH 了,希望他们能给个答复。
阿信sxq
阿信sxq

引用来自“brianway”的评论

盖楼太长了,这是我version 1.0 release 的pom配置:https://github.com/brianway/webporter/blob/v1.0/pom.xml

你在 https://oss.sonatype.org 的welcome 搜索框或者 artifact search搜索栏输入 brianway 应该也能搜到我的上传的包,应该是传上去了,但不在 staging repo 里,不知道啥情况

引用来自“阿信sxq”的评论


com.github.brianway
webporter-collector-zhihu
1.0

是这个吗,已经release了啊,在中央仓库里面都能够看到了啊

引用来自“brianway”的评论

对,就是这个!这就好了吗?

可是我没有走到你文中提到的步骤的啊,[在左边菜单找到“Staging Repositories”,点击,在右边上面一点有一个输入搜索框输入你的groupid进行快速定位,可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知]

上面的步骤我没走过啊。。。为啥
这个就不知道了
brianway
brianway

引用来自“brianway”的评论

盖楼太长了,这是我version 1.0 release 的pom配置:https://github.com/brianway/webporter/blob/v1.0/pom.xml

你在 https://oss.sonatype.org 的welcome 搜索框或者 artifact search搜索栏输入 brianway 应该也能搜到我的上传的包,应该是传上去了,但不在 staging repo 里,不知道啥情况

引用来自“阿信sxq”的评论


com.github.brianway
webporter-collector-zhihu
1.0

是这个吗,已经release了啊,在中央仓库里面都能够看到了啊
对,就是这个!这就好了吗?

可是我没有走到你文中提到的步骤的啊,[在左边菜单找到“Staging Repositories”,点击,在右边上面一点有一个输入搜索框输入你的groupid进行快速定位,可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知]

上面的步骤我没走过啊。。。为啥
第六章 仓库

坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式;而构件的物理表示方式就是文件,Maven通过仓库来统一管理这些文件。   在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可...

浣雨笑笑生
2015/09/20
26
0
将 Smart 构件发布到 Maven 中央仓库

很多朋友都给我提过同样的建议: 建议把 Smart 的 jar 包放到 Maven 中央仓库吧!放在 OSC Maven 里我下载不到。 需要澄清的是,并不是从 OSC Maven 下载不到 Smart 构件,而是这些构件属于第...

黄勇
2014/04/25
0
39
Maven详解之仓库------本地仓库、远程仓库

在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地...

liuhao_sh
2015/10/22
82
0
Maven 私服 Nexus 初识

具体详情可参考链接 http://jingyan.baidu.com/article/preview?eidEnc=fec4bce26b4729f2618d8bc8 1、Nexus仓库分类 Nexus包含了各种类型的仓库类型。在登录后的Nexus界面,单击左边的“Rep...

learn_more
2015/06/04
0
1
Linux搭建Maven私服Nexus3.x环境

一、Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。...

898009427
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
8
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
7
0
MariaDB、Apache安装

11月12日任务 11.6 MariaDB安装 11.7/11.8/11.9 Apache安装 1.MariaDB安装 cd /usr/local/src wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/......

hhpuppy
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部