Maven仍然是目前使用人数很多的、非常受欢迎的项目构建工具。其方便之处在于:我们只需在配置文件pom.xml中引入依赖和插件,他就可以自动从中央仓库下载、配置并运行程序。不过假设我们自己写了一个jar外部包,想放到Maven中央仓库并使得别人和我们自己使用的时候更加方便,应该怎么做呢?

1,第一次注册账户 - 去Sonatype网站注册账户并申请工单

进入issues.sonatype.org,注册一个账户,然后点击“新建”按钮创建一个工单:

如下图,项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型选择:New Project

其余必填项如下图:

图中有*的是必填项,其余留空或者保持默认即可,然后新建工单等待管理员审核。

项目地址可以随便填一个你的项目的Github仓库地址。这里还是强调一下组id的填写,组id需要根据你自己的域名或者开源仓库地址来填。

如果你是用域名,下面给出几个例子:

域名

组id

swsk33.top

top.swsk33

swsk33-xxx.top

top.swsk33-xxx

开源仓库:

仓库地址

组id

gitee.com/swsk33

com.gitee.swsk33

github.com/swsk33

io.github.swsk33

后面在问题-我的报告中可以追踪issue的情况:

等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明Gitee或者Github空间是你的,例如我的:

可以根据其回复的步骤进行。

上述由于我把组id填成了com.github.xxx而他要io.github.xxx,所以他要我需要修改组id(update the Group ID field),如果第一次按照上述要求填对了就不用修改组id,直接按照其回复的步骤进行即可。

意思是让我在我的Github账户中新建一个公开仓库,其空间地址为:https://github.com/swsk33/OSSRH-81835

新建完成后,点击上面Respond按钮开启工单,让管理员去验证。

等待验证完成,管理员就会接着回复你验证成功,这就说明你的工单通过了,可以上传项目了。

这个时候可以关闭问题了:

如果是用域名,则管理员会让你给你的域名添加一个TXT解析,然后他来验证:

给根域名添加TXT解析即可,内容如上图他说的(with the text后面那个OSSRH-xxx):

后续步骤和上述是一样的。

2,配置我们的项目

现在我们可以上传项目了。

先进入我们的Maven安装目录,编辑目录里面的conf文件夹里面的settings.xml文件,找到里面的标签,添加如下内容:

ossrh

你的sonatype用户名

你的sonatype密码

这个配置是配置我们上述注册的Sonatype账户用户名和密码,使得我们的项目可以上传上去。

再配置我们要发布的项目的pom.xml如下形式:

4.0.0

组id

工件id

版本

jar

项目名

描述

项目地址

1.8

${java.version}

${java.version}

UTF-8

The Apache Software License, Version2.0

https://www.apache.org/licenses/

repo

项目git仓库地址

项目git克隆地址

项目git仓库地址

开发者名

邮箱

开发者主页

ossrh

https://s01.oss.sonatype.org/content/repositories/snapshots

ossrh

https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/

org.apache.maven.plugins

maven-source-plugin

3.3.0

attach-sources

jar-no-fork

org.apache.maven.plugins

maven-javadoc-plugin

3.5.0

private

true

attach-javadocs

jar

org.apache.maven.plugins

maven-gpg-plugin

3.1.0

sign-artifacts

verify

sign

简单的说一下这个配置文件:

必须就是我们刚刚工单申请的groupId,包名自己取

是应用版本,注意版本里面不要带有-SNAPSHOT字样,否则上传后可能无法在仓库找到并发布

, 是项目网址、名称和描述,这三者都是必须要的,缺一不可,否则上传项目是无法通过校验的

, 这个也是必须的,根据自己的实际情况填写

中要设置snapshot仓库()和release仓库()地址,如上填写,需要注意的是两个仓库配置中的必须和我们前面设置的settings.xml中的中的对应一致,否则无法上传

部分是发布项目必要的一些组件,已经在上面的配置文件中配置好了,不用改变了,作用见上面的注释

上面给出的示例,大家可以全部复制作为一个模板去使用,自己进行修改其中的内容。

3,生成秘钥并上传工程

在上传项目时,我们必须先生成秘钥才能上传。

安装git,右键打开git bash输入生成秘钥命令:

gpg --gen-key

然后会提示要你输入姓名和邮箱地址:

输入完成,会弹出个窗口让你设置这个秘钥的密码并确认:

自己设定一个密码并牢记,因为后面要用到这个密码的。

然后输入命令查询已经生成的秘钥:

gpg --list-keys

在pub字段下面有一个十六进制数,那就是这个秘钥的ID。

然后我们要把这个秘钥上传至公钥服务器,使用如下命令:

gpg --keyserver keyserver.ubuntu.com --send-keys 秘钥ID

秘钥ID就是我们刚刚gpg --list-keys命令查到的自己的秘钥的ID,复制过去即可。

然后验证是否成功地上传到了服务器:

gpg --keyserver keyserver.ubuntu.com --recv-keys 秘钥ID

如果两条命令执行输出结果都如下说明成功:

这样,就完成了秘钥的配置了。

接下来,在我们的项目文件夹下打开Git Bash或者其它终端,输入上传项目命令:

mvn clean deploy

执行过程中会弹出一个窗口要求输入秘钥密码,就是输入我们先开始生成秘钥时设置的秘钥密码。

等待上传,最后显示绿色的Build Success说明上传成功。

4,去仓库发布项目到Maven中央仓库

上面的步骤只是把项目传到了Sonatype上了,还没有发布出去。

进入s01.oss.sonatype.org,登录,点击旁边的Staging Repositories即可看到我们发布的项目。

勾选项目,点击close按钮,开始进行项目校验。

我这里已经点过了,所以是灰色的。

再点击下面的active标签可以查看close的进度:

显示All rules passed: Central Sync Requirement就说明校验通过,可以发布了。

再点击上面的release按钮即可发布到中央仓库了。

完成后,大约过个2个小时,你就可以在central.sonatype.com搜索到你的发布的项目了!

5,以后再发布的时候

以后发布项目,如果groupId不变的话,我们就不需要再去申请工单了。直接重复上述的2、3、4部分中的部分关键步骤即可。

上述settings.xml已经配置了servers,就不用再次配置了,即第2部分配置settings.xml可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第3部分的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml并重新生成并上传秘钥了。

参考文档:

Sonatype中央仓库发布概述:传送门

Sonatype配置GPG密钥指引:传送门

Sonatype发布Maven配置说明:传送门

Sonatype发布项目配置pom.xml样例:传送门

Sonatype项目发布指引:传送门

Maven源码生成插件使用文档:传送门

Maven Javadoc插件使用文档:传送门

Maven GPG插件使用文档:传送门