欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
关于maven中央仓库
作为一个java程序员,对maven中央仓库https://mvnrepository.com/自然是非常熟悉的,毕竟咱们的应用依赖的jar大部分都来自此处,如果您想把自己开发的java库也托管在上面,让大家像使用Jackson、Spring那样轻松简单的使用您的jar,就请随本文一起操作吧;
先看看效果,下图是我发布的java库在中央仓库的搜索结果:
前提条件
- 由于sonatype官方会要求您在github创建一个仓库(仓库名由sonatype官方指定,以此验证您是否有github操作权限),因此请确保您自己有github账号,并且可以创建仓库
本篇概览
- 梳理一下,按照以下步骤将自己的java库发布到maven中央仓库:
文末还会对曾经踩过的小坑做了总结,希望能帮助读者们提前避开
看起来略有些繁琐,但其实很简单,接下来开始吧
准备工作
首先请把您的java工程准备好,我用的是一个非常普通的maven工程,名为opencv-linux,github仓库地址https://github.com/zq2599/opencv-client
本次涉及的软件信息如下:
- 操作系统:macOS Monterey(12.0.1)
- JDK:1.8.0_312
- Maven:3.8.3
1. 注册帐号
- 打开网站https://issues.sonatype.org,注册一个帐号,登录后效果如下图:
2. 创建问题(issue)
- 点击上图红框中的新建开始创建issue,如下图,项目选择Community Support,问题类型是New Project:
- 接下来填写项目相关的信息,请注意Project URL里面是您自己的工程对应的github仓库地址:
- 提交后等待几分钟,注册账号时填写的邮箱会收到一封邮件,要求你创建一个仓库,以此来证明之前提交的github帐号属于你自己:
- 上述内容在刚才新建的issue页面也能看到,如下图,即sonatype的评论:
3. 创建sonatype指定的仓库
登录您的github,按照要求创建仓库,我这里要创建的是https://github.com/zq2599/OSSRH-74965
老老实实的创建出来就行了:
4. 在issue上进行回复
- 打开issuse,增加一个评论,如下图:
- 不久后(我这边是十多分钟),就会收到一条新的评论,通知你可以去做发布了,并给你了snapshot和release的发布地址:
5. 安装GPG
后面的操作中,在将jar发布到中央仓库时,要用GPG工具对上传的数据进行签名,因此接下来要准备好GPG秘钥
先安装GPG软件,打开网站:https://www.gnupg.org/download/
下载安装文件,请选择适合您的操作系统的,我的选择如下图红框:
- 安装GPG
6. 生成秘钥并上传
安装完成后,在控制台执行gpg2 --gen-key开始创建秘钥
根据提示输入账号、邮箱、密码等:
GnuPG needs to construct a user ID to identify your key.
Real name: zq2599
Email address: [email protected]
You selected this USER-ID:
"zq2599 "
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
- 操作完成后得到如下信息:
gpg: key 11027EJIHGFEDCBA marked as ultimately trusted
gpg: directory '/Users/will/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/Users/will/.gnupg/openpgp-revocs.d/561AEE4EA92EE3E4C389941811027E9876543210.rev'
public and secret key created and signed.
pub rsa3072 2021-11-10 [SC] [expires: 2023-11-10]
561AEE4EA92EE3E4C389941811027E9876543210
uid zq2599
sub rsa3072 2021-11-10 [E] [expires: 2023-11-10]
如上所示,得到了pub key等于561AEE4EA92EE3E4C389941811027E9876543210
执行以下命令,将秘钥同步到云端,注意keyserver,网上可以搜到很多个,个人实际操作中,下面这个是可以成功的:
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 561AEE4EA92EE3E4C389941811027E9876543210
7. maven全局配置
试想把sonatype的账号密码写在项目的pom.xml中,再上传到github让所有人都看到?相信您一定不愿意这样,所以还是放在maven的全局配置中比较安全,毕竟是保存在自己的电脑上
打开maven的配置文件settings.xml,在servers下面增加一个server节点,这是个账号密码的配置,对应的是https://issues.sonatype.org的账号密码:
ossrh
zq2599
12345678
- 在profiles下增加一个profile节点,gpg.passphrase的内容是刚才创建gpg秘钥时输入的密码:
gpg
gpg2
abcdefgh
- 涉及到账号密码的全局配置就完成了,接下来打开您的java工程,咱们去修改pom.xml的配置
8. maven项目配置
- 首先要搞清楚发布仓库的地址在哪,官方指导如下,给出了snapshot和release的仓库地址:
- 以下是java工程的pom.xml文件,需重点关注的地方都有中文注释,请不要漏掉带序号的注释,这些都是最关键的配置,这种注释共11个:
4.0.0
io.github.zq2599
opencv-linux
0.0.3
opencv-linux
opencv-linux
https://github.com/zq2599/opencv-client
1.8
jar
The Apache Software License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
repo
scm:git:[email protected]:zq2599/opencv-client.git
scm:git:[email protected]:zq2599/opencv-client.git
https://github.com/zq2599/opencv-client/tree/main
zq2599
[email protected]
https://github.com/zq2599
+8
ossrh
https://s01.oss.sonatype.org/content/repositories/snapshots
ossrh
https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
org.projectlombok
lombok
1.16.18
org.sonatype.plugins
nexus-staging-maven-plugin
1.6.7
true
ossrh
https://s01.oss.sonatype.org/
false
org.apache.maven.plugins
maven-source-plugin
3.1.0
true
attach-sources
jar
true
true
org.apache.maven.plugins
maven-javadoc-plugin
3.0.0
true
bundle-sources
package
jar
1024
UTF-8
protected
true
false
none
org.apache.maven.plugins
maven-compiler-plugin
1.8
UTF-8
org.sonatype.plugins
nexus-staging-maven-plugin
org.apache.maven.plugins
maven-source-plugin
org.apache.maven.plugins
maven-compiler-plugin
release
org.apache.maven.plugins
maven-gpg-plugin
1.5
gpg
verify
sign
9. 编译、构建、上传
- 编译构建上传其实很简单,下面一行命令搞定(进入pom.xml所在目录下执行以下命令):
mvn clean javadoc:jar deploy -P release
- 构建期间会弹出窗口让你输入密码,请输入创建GPG秘钥时设置的密码:
- 构建和上传成功后,控制台输出如下(截选):
...
[INFO] Installing /Users/zhaoqin/github/blog_demos/opencv-linux/target/opencv-linux-0.0.3-sources.jar.asc to /Users/zhaoqin/github/blog_demos/opencv-linux/target/nexus-staging/staging/543da2cd9af848/io/github/zq2599/opencv-linux/0.0.3/opencv-linux-0.0.3-sources.jar.asc
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "543da2cd9abc12"
[INFO] * Created staging repository with ID "iogithubzq2599-1008".
[INFO] * Staging repository at https://s01.oss.sonatype.org:443/service/local/staging/deployByRepositoryId/iogithubzq2599-1008
[INFO] * Uploading locally staged artifacts to profile io.github.zq2599
Uploading to ossrh:
...
https://s01.oss.sonatype.org:443/service/local/staging/deployByRepositoryId/iogithubzq2599-1008/io/github/zq2599/opencv-linux/0.0.3/opencv-linux-0.0.3-sources.jar.asc (659 B at 1.2 kB/s)
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "iogithubzq2599-1008".
Waiting for operation to complete...
...
[INFO] Remote staged 1 repositories, finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.199 s
[INFO] Finished at: 2021-11-12T08:08:37+08:00
- 记住上述信息中展示的iogithubzq2599-1008,这是本次上传操作在仓库中对应的ID
10. 登录指定的仓库网址
- 接下来登录Nexus网站,具体的网址一定要看issue的评论,如下图红框,我这里要登录的是:https://s01.oss.sonatype.org
- 点击下图右上角红框登录,账号密码是在https://issues.sonatype.org注册的那个:
11. 发布
- 登录成功后,点击下图红框中的Staging Repositories:
- 如下图,找到合适的记录(我这里是iogithubzq2599-1008),点击红框3中的Release进行发布,如果状态不是closed,就要展开底部的Activity查看发生了什么异常:
- 操作成功,如下图所示:
12. issue收到评论,提示完成时间
- 静候十多分钟,issue上收到一条评论,提示同步操作已激活,三十分钟内同步到https://repo1.maven.org/,四小时内同步到https://search.maven.org:
- 网上有文章提到第一次发布要在issuse上评论,才会触发同步操作,我这里没有遇到(正打算评论呢,发现已经开始同步了)
13. 三十分钟内同步到https://repo1.maven.org
- 静候三十分钟,可以在网站https://repo1.maven.org上看到上传的工程相关文件了,如下图:
14. 四小时内同步到https://search.maven.org
- 静候四小时,可以在网站https://search.maven.org上看到上传的工程相关文件了,如下图:
15. 二十四小时内同步到https://mvnrepository.com/
- 同步到https://mvnrepository.com的时间并不是精确的二十四小时,而是我时隔二十四左右在此网站上可以搜索到自己的库:
- 至此,自己的java库已成功发布到maven中央仓库,可以像Jackson、Spring库那样使用这个库了,用法就是添加这个依赖:
io.github.zq2599
opencv-linux
0.0.3
踩坑记录
- 现在已完成了所有的操作,回顾一下,整个过程其实相对比较顺利,只遇到了三个小坑需要您注意:
- 同步gpg秘钥到云端的时候,网上有文章提到用hkp://subkeys.pgp.net,我在使用该地址的时候一直在报错,改为hkp://keyserver.ubuntu.com:11371之后上传成功
- maven工程的pom.xml文件中,一定要有url节点,如下图,否则会在同步到云端的时候报错Project url missing
- 发布的操作是在网页上进行的,网上有的文章提到网站是https://oss.sonatype.org,最初我也打开了该网页并尝试登录,可惜始终登录失败,最终,在issue的评论上发现如下图红框,要登录的网站是https://s01.oss.sonatype.org
- 至此,所有操作都已完成,如果您正在将自己的java库发布到maven中央仓库,希望本文能给您一些参考
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos