概要
在上一篇文章中,我从一个学习的角度写了一篇博文:
http://blog.youkuaiyun.com/xiajiqiu/article/details/77607492
该博文记录了我在实际学习过程中的每一个步骤,但是大多数读者是希望有一个清晰的步骤来实现发布构件到Maven中央仓库的,因此我将上一篇博文进行的精简,其实整个步骤大致如下:
1. 注册JIRA帐号
2. 创建新的Issue并等待工作人员审核通过(2天左右)
3. GPG创建密钥对同时上传到key-servers
4. 编写符合规范的java项目,主要是pom文件规范
5. 首次发布到中央仓库,需要在原来的Issue上回复等待审核
6. 后续的发布过程
接下来就上面几个步骤一一介绍。
注册JIRA帐号
注册地址是:https://issues.sonatype.org/secure/Signup!default.jspa
请读者自行进行注册,并记录好自己的帐号和密码,后续会使用到。
创建Issue并等待审核
Issue创建地址:
https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
该链接打开的页面如下:
每个表单项我还是简单说下吧:
表单项 | 说明 |
---|---|
Summary | 这就是项目说明,你直接可以写个人项目,搞个统称就行 |
GroupID | 看到了吗,下面有一行说明怎么定义groupId的一些建议:http://central.sonatype.org/pages/choosing-your-coordinates.html 比如你喜欢放到github上或者oschina上,你完全可以用类似下面的:com.github.{username} 比如 com.github.arvinnet.osc.{username} 比如 net.osc.arvin |
Project_URL | 你就填写你的github或者git.oschina.net 的,或者个人主页也行 |
SCM_URL | 写成和Project URL 一样也没啥事 |
创建完成后会进入该Issue界面,通常会立刻收到一个Comment,内容如下:
会询问你使用的域名是否是你的或是你的组织,这个你直接说是或者你是这个的成员就行,一般都会通过的。
可能要2天左右的时间才会收到工作人员的回复,如果看到下面这个说明是成功的:
GPG密钥对使用
安装Gpg4win
Gpg4win下载地址:https://www.gpg4win.org/download.html
将安装文件下载下来,然后打开DOS进行验证:
生成密钥对
一个密钥对允许你对你要发布的组件进行GPG签名和验证,可以通过以下命令来生成新的密钥对:
gpg –gen-key
生成过程如下:
当输入 O 的时候会弹出这个对话框,要求输入密码 passphrase,这个很重要,你一定要记住并且在进行发布的时候是需要用到的。
查看密钥对
上一步骤中我们生成了密钥对,接下来,我们可以使用以下命令查看本机包含的密钥对:
其中,pub表示是公钥,而sub表示私钥。
发布公钥到GPG key-servers
这一步实际上是非常的关键的,Sonatype 公司需要一个公钥来验证你deploy的文件,那么它从哪获取到这个公钥呢?这就需要你部署到key-servers上面去,有哪些key-servers呢?
文档中提供了一个GPG 的 key-servers
hkp://pool.sks-keyservers.net
实际上,在我实际的操作中,第一次我deploy的时候,Sonatype在进行验证的时候,说找不到公钥,然后告诉我需要上传到GPG 的key-servers, 当时具体的提示信息是:
failureMessage No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://pgp.mit.edu:11371/. Upload your public key and try the operation again.
failureMessage No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://keyserver.ubuntu.com:11371/. Upload your public key and try the operation again.
failureMessage No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://pool.sks-keyservers.net:11371/. Upload your public key and try the operation again.
从上面我们发现有三个 key-servers 是 Sonatype公司要用到的,Sonatype公司会在上面任意一个key-servers上进行搜索公钥,具体的key-servers 为:
http://pgp.mit.edu:11371
http://keyserver.ubuntu.com:11371
http://pool.sks-keyservers.net:11371
这个要注意了,这个是带端口的,这个我在实际操作中,也踩了这个坑,一开始我上传公钥到下面中的一个(注意,没有带端口号)
gpg –keyserver hkp://pool.sks-keyservers.net –send-keys C6EED57A
gpg –keyserver hkp://pgp.mit.edu –send-keys C6EED57A
gpg –keyserver hkp://keyserver.ubuntu.com –send-keys C6EED57A
注意了,协议不是http,而是 hkp,要看清楚了,实际上是需要带端口号上传的:
gpg –keyserver hkp://pool.sks-keyservers.net:11371 –send-keys C6EED57A
gpg –keyserver hkp://pgp.mit.edu:11371 –send-keys C6EED57A
gpg –keyserver hkp://keyserver.ubuntu.com:11371 –send-keys C6EED57A
没有成功的话要注意Sonatype反馈了什么信息然后根据信息进行修改。
上面是将公钥发布到 GPG key-servers 的命令,我们可以通过以下命令查看具体的公钥信息:
gpg –keyserver hkp://pool.sks-keyservers.net:11371 –recv-keys C6EED57A
gpg –keyserver hkp://pgp.mit.edu:11371 –recv-keys C6EED57A
gpg –keyserver hkp://keyserver.ubuntu.com:11371 –recv-keys C6EED57A
本例中我将我的公钥发布到以下key-servers:
查看:
POM文件规范
POM文件作为发布组件的一部分,需要你定义一些约定的规范值才能将组件发布上去,本小节就是描述这个规范的。
正确的坐标
项目的坐标,我们又称之为 GAV,即GroupId,ArtifactId,Version三个值,说明如下:
• groupId: the top level namespace level for your project starting with the reverse domain name