1.背景

当你写了一个自我感觉良好的开源工具希望给他人分享,如果只是在github等网站进行公布之外,用户使用起来还不是很方便,特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库,这样别人使用就会方便很多。接下来,我们就来看看如何使用maven发布自己依赖到中央仓库吧。

由于原先的sonatype网站已经退役,发布流程已经很大不一样。笔者只能根据官网摸着石头过河,一路踩坑才完成大业。

2.版本控制规则

先说下,对于发布的工具,我们还是要遵循基本的版本规则,采用常用的三段式。即

主版本号(Major version).次版本号(Minor version).修订号(Revision number)

如:1.2.3

主版本号:版本的主要变更,通常添加新特性会增加主版本号,如从1升级到2.次版本号:版本的次要变更,修复bug或增加小特性会增加次版本号,如从2.1升级到2.2.修订号:版本的微小变更,通常修复bug或优化功能会增加修订号,如从2.2.1升级到2.2.2.

3.注册Sonatype账户

3.1Sonatype介绍

Sonatype是一家软件公司,专注于提供Maven和Nexus仓库管理工具。Sonatype负责管理和维护Maven中央仓库。该仓库是Maven生态系统中最重要的公共仓库之一,包含了大量的开源Java项目和库。

原先的网站https://issues.sonatype.org/secure/Signup!default.jspa 

官方已宣布退役,原文

3.2新注册网站

前往Maven Central: Search 注册,点击右上方的注册按钮。注册过程很简单,不详述。

3.3新建命名空间

注册成功,系统会弹出一个添加命名空间的界面。如果使用github账户登录,有可能不会弹出这个界面。因为系统自动会你创建一个 io.github.的命名空间。

发布依赖需要一个命名空间,也就是maven系统的groupId。如果自己没有申请公网域名的话,可以使用github这个免费域名。

3.4验证命名空间

在自己的github上创建一个临时项目,证明域名是自己的(临时仓库名字系统会提供,域名验证成功后可以删除)。

创建之后,等待一会会,可以看到命名空间的状态变为已验证

4.修改pom文件

根据sonatype的官方要求,修改项目的pom文件,参考下 官方对发布项目的基本要求

4.1增加标签

主要需要添加几个标签,如下所示

GitHub Issues

https://github.com/kingston-csj/jforgame/issues

scm:git:https://github.com/jforgame/jforgame.git

scm:git:git@github.com:jforgame/jforgame.git

https://github.com/jforgame/jforgame

Apache License, Version 2.0

http://www.apache.org/licenses/LICENSE-2.0.txt

repo

kingston-csj

kingston

definemyself@163.com

https://github.com/kingston-csj

owner

developer

4.2部署包带上source文件和doc文件

sonatype要求部署的包要附带源代码及API文档,即增加两个文件

example-application-1.4.7-sources.jar

example-application-1.4.7-javadoc.jar

只需在pom文件加两个插件即可

org.apache.maven.plugins

maven-source-plugin

2.2.1

attach-sources

jar-no-fork

org.apache.maven.plugins

maven-javadoc-plugin

2.9.1

attach-javadocs

jar

4.3提供文件校验码

对每个上传的文件(除了asc文件),需要附加校验码文件(md5+sha1)。 后文介绍(central-publishing-maven-plugin插件内嵌本功能)

假设你上传的文件为

example-application-1.4.7.pom

example-application-1.4.7.jar

example-application-1.4.7-sources.jar

example-application-1.4.7-javadoc.jar

需要部署的文件为

example-application-1.4.7.pom.md5

example-application-1.4.7.pom.sha1

example-application-1.4.7.jar.md5

example-application-1.4.7.jar.sha1

example-application-1.4.7-sources.jar.md5

example-application-1.4.7-sources.jar.sha1

example-application-1.4.7-javadoc.jar.md5

example-application-1.4.7-javadoc.jar.sha1

5.GPG签名

GPG(GNU Privacy Guard)是一种加密和签名工具,常用于软件包的签名和验证。在Maven中,GPG签名用于确保发布到远程仓库的依赖是经过验证和可信的。若希望发布依赖到远程仓库,需要进行GPG签名。

5.1下载GPG秘钥

前往官网下载 -->  gpg下载

5.2创建密钥 

使用Kleopatra(GPG可视化工具),创建密钥 

点击文件->新建OpenGPG秘钥对,输入名称和邮箱,勾选“使用密码句保护生成的密钥”

生成之后,右键证书,选择“在服务器上发布”

也可以选择使用命令行

gpg --keyserver keyserver.ubuntu.com --send-keys yourPublicKey

6.使用maven部署

6.1sonatype生成用户token

在 sonatype  生成用户token

6.2setting文件添加server

 maven配置文件setting.xml添加生成的token

central

token-username

token-password

6.3setting文件添加gpg签名

ossrh

true

gpg

the_pass_phrase

6.4修改pom文件的版本号

在多模块应用,版本号一般下载最顶层的pom.xml里。见标签。

io.github.jforgame

jforgame-parent

${revision}

pom

jforgame-parent

https://github.com/jforgame/jforgame

1.0.0

在发布的时候,如果手动挨个修改版本号超麻烦。可以使用maven的版本插件,直接在项目根pom.xml目录下,使用以下命令就能轻松设置工程等的版本。

mvn versions:set -DnewVersion="1.0.0"

6.5使用maven发布插件

使用依赖可以方便对依赖进行发布,详情见官网--> sonatype依赖部署插件

父pom文件加入插件申明 

org.sonatype.central

central-publishing-maven-plugin

0.4.0

true

central

true

其中publishingServerId 标签代表的serverId是配置在maven安装目录config下的setting.xml。

注意:项目采用多模块,如果不想部署全部子模块,只需要在父pom文件的标签注释掉过滤的模块即可。

在根目录下,执行

mvn deploy -DskipTests

6.6sonatype网站真正发布

执行成功之后,在sonatype网站可以看到上传的bound文件。

选择“Publish”按钮就可以完成发布啦。 

发布之后,泡杯茶,回来就可以在中央仓库,找到自己的代码了。

 6.7项目中使用

pom文件使用中央仓库(其他仓库同步仍需时间)

central

central

https://repo1.maven.org/maven2

true

>

引入依赖 

io.github.jforgame

jforgame-socket-netty

1.0.0

一行代码即可创建socket网络服务

TcpSocketServerBuilder.newBuilder()

.bindingPort(HostAndPort.valueOf(ServerConfig.getInstance().getServerPort()))

.setMessageFactory(GameMessageFactory.getInstance())

.setMessageCodec(new StructMessageCodec())

.setSocketIoDispatcher(new MessageIoDispatcher(ServerScanPaths.MESSAGE_PATH))

.build()

.start();

 

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。