流程简述
- 创建 Issue
- 等待审核
- 配置 Maven 并修改
pom.xml
- 发布项目
- 回复“项目已发布”信息
- 等待 Maven 仓库同步信息(需等待很长时间)
- 在 Maven 仓库中确认已发布的项目
登录/创建 Sonatype
访问 Sonatype 官网,登录或创建一个用户。
新建一个 Issue
在 Dashboard 页面,点击 “Create” 按钮。
按照提示新建一个 Issue。例如:
注意:
- Group Id 要符合命令规范,即域名的倒序,还要保证其唯一性。(最好有自己的独立域名,一级域名或二级域名都行)
- 在创建 Issue 时,Project URL 和 SCM url 虽然是必填项,但如果你的项目还没有上传,还没有项目地址和 Git 地址,此处可以先填写一个临时的 URL 不需要一定能被访问,以后还可以修改该值。
查看新建的 Issue
创建完 Issue 后,可以通过 Issues -> Reported by me 查看 Issue 审核状态。
上面这个截图已经是我审核通过后的状态,如果你是刚刚新建的 Issue,那么其中的 Status
和 Resolution
和我这个是不一样的。具体是什么当时忘截图了,应该显示是未处理状态。
等待审核新创建的 Issue 并回复信息
通常在你提交完 Issue 之后的几分钟内,就会有人审核你的提交信息,并对你的提交 进行回复,确认你是否拥有所填写的域名。例如:
此时你需要回复信息,表明你拥有该域名即可。回复完信息后,一两个小时内,你会再次收到对方的回复,告诉你创建的 Issue 已经通过审核了,你可以发布你的项目了。例如:
例外,对方的回复中还要求你在发布项目之后,需要回复一下信息,告诉对方你已经发布了项目。你只需要简单的回复下即可。例如:”I have promoted my first release. Thanks.”
配置 Maven 并修改 pom.xml
使用 GPG 生成密钥对
以 CentOS7 为例,说明如何生成 GPG 密钥对。
使用如下命令生成密钥对(基本一路回车就行,最后会要求输入两次 Passphase,这个千万不能忘,发布项目时会用到):
1 | # gpg --gen-key |
生成的所有文件保存在/root/.gnupg/
目录下。你也可以将把拷贝到其它中机器在使用,但是要注意该文件夹的权限应该是“700”。
需要记下 gpg: 密钥 <your key id> 被标记为绝对信任
中的 <your key id>
,一会要用到。
可以使用如下命令查看生成的 Keys:
1 | # gpg --list-keys |
发布生成的 Key
使用如下命令发布生成的 Key:
1 | # gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <your key id> |
上面的结果是第二执行的结果。(第一次执行的结果忘保存了…)
注意:
由于众所周知原因,上述服务器地址通常是无法访问的,因此执行这一步时,需要稳定的科学上网环境。根据经验,凡是这一步出错的,基本上都是上网方式不对导致了。
另外,建议你同时将你的 Key 发布到其它几个常用的服务器,这样可以加速 Key 的同步过程。其它常用服务器有:
- pgp.mit.edu
- keyserver.ubuntu.com
查看 Key 是否上传成功
1 | # gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys <your key id> |
成功执行完上一步的命令之后,服务器会将你的 Key 同步到其它服务器,因此可能需要等上几分钟才能收到上传成功的结果。
修改 Maven 全局配置文件
此步骤需要修改 Maven 安装目录下的 settings.xml
文件。由于我的 Maven 是通过 yum
安装的,因此我需要修改如下文件:
1 | # vim /usr/share/maven/conf/settings.xml |
找到<servers>
节点,并追加如下内容:
1 | <server> |
其中 id
的值可以任意设置,只要保证它在 <servers>
的唯一性就行。请记住该 id
值,以后会用到。<username>
,<password>
就是你登录 Sonatype 的用户名及密码。
修改 pom.xml
文件
Maven 仓库对 pom.xml
有着严格的要求,需要很多元信息:
名称及版本信息
- groupId
- artifactId
- version
项目信息
- name
- description
- url
版权信息
- licenses
开发者信息
- developers
SCM 信息
- scm
详细说明请查看官网指南。
注意:
根据官网指南要求,version
不能以 -SNAPSHOT
结尾,因为它是为了标识处于开发状态用的保留字。并建议你使用语义化的version
。规则如下:MAJOR.MINOR.PATCH
下面是我的完整 pom 文件。
官网完整 pom 文件示例如下:
https://github.com/simpligility/ossrh-demo/blob/master/pom.xml
https://bitbucket.org/simpligility/ossrh-pipeline-demo/src
特别注意:
通常修改 pom.xml
时,还会添加一些常用的插件,例如源代码插件,Javadoc 插件等。这就要求你的 Java 代码中,若使用了 Javadoc,请务必符合 Javadoc 规范。否则发布时会报错的。
另外,nexus-staging-maven-plugin
插件配置项目中的 serverId
需要和之前修改的 settings.xml
文件中 <server>
的 <id>
相同。详见我的完整 pom 文件。
发布项目
经过上述步骤后,就可以执行如下命令发布你的项目了:
1 | mvn clean deploy -Dgpg.passphrase=<Your passphrase> |
其中 passphrase
就是生成 GPG 密钥对时,输入的 passphrase
。
最后执行结果如下:
1 | [INFO] Scanning for projects... |
看到 BUILD SUCCESS
就说明发布成功了。
回复“项目已发布”信息
之前已经提到了,发布成功之后,别忘了在 Sonatype 上回复一下。例如: ”I have promoted my first release. Thanks.”
在你回复之后,用不了多长时间(一二十分钟吧),你会收到对方的答复信息:
通常 10 多分钟你的项目就会被发布到 Maven Central,不过一般需要等上几个小时,才能官网上搜索到你发布的项目。以我为例,至少花了 4 个小时。
在官网上对发布的项目进行确认
经过漫长的等待,你最终可以在 Maven Central 上搜索到自己的项目了。
同时在仓库中也可以可以搜索到自己的项目了。