我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

关于maven中央仓库

  • 作为一个java程序员,对maven中央仓库https://mvnrepository.com/自然是非常熟悉的,毕竟咱们的应用依赖的jar大部分都来自此处,如果您想把自己开发的java库也托管在上面,让大家像使用Jackson、Spring那样轻松简单的使用您的jar,就请随本文一起操作吧;
  • 先看看效果,下图是我发布的java库在中央仓库的搜索结果:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

前提条件

  • 由于sonatype官方会要求您在github创建一个仓库(仓库名由sonatype官方指定,以此验证您是否有github操作权限),因此请确保您自己有github账号,并且可以创建仓库

本篇概览

  • 梳理一下,按照以下步骤将自己的java库发布到maven中央仓库:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 文末还会对曾经踩过的小坑做了总结,希望能帮助读者们提前避开
  • 看起来略有些繁琐,但其实很简单,接下来开始吧

准备工作

  • 首先请把您的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. 注册帐号

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

2. 创建问题(issue)

  • 点击上图红框中的新建开始创建issue,如下图,项目选择Community Support,问题类型是New Project:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 接下来填写项目相关的信息,请注意Project URL里面是您自己的工程对应的github仓库地址:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 提交后等待几分钟,注册账号时填写的邮箱会收到一封邮件,要求你创建一个仓库,以此来证明之前提交的github帐号属于你自己:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 上述内容在刚才新建的issue页面也能看到,如下图,即sonatype的评论:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

3. 创建sonatype指定的仓库

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

4. 在issue上进行回复

  • 打开issuse,增加一个评论,如下图:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 不久后(我这边是十多分钟),就会收到一条新的评论,通知你可以去做发布了,并给你了snapshot和release的发布地址:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

5. 安装GPG

  • 后面的操作中,在将jar发布到中央仓库时,要用GPG工具对上传的数据进行签名,因此接下来要准备好GPG秘钥
  • 先安装GPG软件,打开网站:https://www.gnupg.org/download/
  • 下载安装文件,请选择适合您的操作系统的,我的选择如下图红框:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 安装GPG

6. 生成秘钥并上传

  • 安装完成后,在控制台执行gpg2 –gen-key开始创建秘钥
  • 根据提示输入账号、邮箱、密码等:
GnuPG needs to construct a user ID to identify your key.

Real name: zq2599
Email address: zq2599@gmail.com
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库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 以下是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:git@github.com:zq2599/opencv-client.git
        scm:git:git@github.com:zq2599/opencv-client.git
        https://github.com/zq2599/opencv-client/tree/main

            zq2599
            zq2599@gmail.com
            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
                        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秘钥时设置的密码:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 构建和上传成功后,控制台输出如下(截选):
...

[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

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

11. 发布

  • 登录成功后,点击下图红框中的Staging Repositories:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 如下图,找到合适的记录(我这里是iogithubzq2599-1008),点击红框3中的Release进行发布,如果状态不是closed,就要展开底部的Activity查看发生了什么异常:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 操作成功,如下图所示:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

12. issue收到评论,提示完成时间

  • 静候十多分钟,issue上收到一条评论,提示同步操作已激活,三十分钟内同步到https://repo1.maven.org/,四小时内同步到https://search.maven.org:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 网上有文章提到第一次发布要在issuse上评论,才会触发同步操作,我这里没有遇到(正打算评论呢,发现已经开始同步了)

13. 三十分钟内同步到https://repo1.maven.org

  • 静候三十分钟,可以在网站https://repo1.maven.org上看到上传的工程相关文件了,如下图:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

14. 四小时内同步到https://search.maven.org

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

15. 二十四小时内同步到https://mvnrepository.com/

  • 同步到https://mvnrepository.com的时间并不是精确的二十四小时,而是我时隔二十四左右在此网站上可以搜索到自己的库:

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 至此,自己的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

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  1. 发布的操作是在网页上进行的,网上有的文章提到网站是https://oss.sonatype.org,最初我也打开了该网页并尝试登录,可惜始终登录失败,最终,在issue的评论上发现如下图红框,要登录的网站是https://s01.oss.sonatype.org

我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  • 至此,所有操作都已完成,如果您正在将自己的java库发布到maven中央仓库,希望本文能给您一些参考

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界…

https://github.com/zq2599/blog_demos

Original: https://www.cnblogs.com/bolingcavalry/p/15820840.html
Author: 程序员欣宸
Title: 我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686027/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 运算符重载限制

    p387 5.表 11.1 中的大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。 =:赋值运算符。 ():函数调用运算符。 []:下标运算符…

    技术杂谈 2023年7月11日
    066
  • CVE-2020-3452漏洞复现

    一、前言 前端时间碰到了该漏洞,记录一下! 二、漏洞介绍 该漏洞为思科ASA设备和FTD设备的未授权任意文件读取漏洞,但仅能读取到 WEB 目录下的文件,影响版本如下: Cisco…

    技术杂谈 2023年7月10日
    068
  • jupyter-notebook 以yarn模式运行出现的问题及解决

    之前用pyspark虚拟机只跑了单机程序,现在想试试分布式运算。在做之前找了书和博客来看,总是有各种各样的问题,无法成功。现在特记录一下过程:这里一共有两个虚拟机,一个做maste…

    技术杂谈 2023年5月30日
    059
  • 拒绝蛮力,高效查看Linux日志文件!

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 日常分析问题时,会频繁地查看分析日志,但如果蛮力去查看日志,耗时费力还不一定有效果,因此我总结…

    技术杂谈 2023年7月25日
    081
  • Java动态脚本Groovy读取配置文件

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 核心涉及: @Value:作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值…

    技术杂谈 2023年7月11日
    091
  • 技术管理进阶——技术部如何做绩效考核设计?

    原创不易,求分享、求一键三连 之前有个同学问我技术部的绩效方案怎么设计,想着这么多年的考核与被考核,我陷入了沉思,一方面是我对考核的认识未必正确、全面,另一方面是有些同学未必能接受…

    技术杂谈 2023年6月1日
    0102
  • 使用Xamarin开发手机聊天程序 — 基础篇(大量图文讲解 step by step,附源码下载)

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,X…

    技术杂谈 2023年6月1日
    0104
  • Shiro中Subject对象的创建与绑定流程分析

    我们在平常使用Shrio进行身份认证时,经常通过获取Subject 对象中保存的Session、Principal等信息,来获取认证用户的信息,也就是说Shiro会把认证后的用户信…

    技术杂谈 2023年7月25日
    065
  • 【新特性速递】更漂亮的主题风格(窈窕主题,君子好逑)

    FineUI 的下个版本(v8.0.0),我们特邀资深UI设计师对我们的整体界面风格进行优化调整,今天给大家带来更漂亮的样式主题风格。 智能树控件样式优化 v7.1.1: v8.0…

    技术杂谈 2023年6月1日
    086
  • 8086 汇编

    8086 汇编 1、8086汇编 介绍 2、8086汇编 内存交互 3、8086汇编 CPU 寄存结构 4、8086汇编 Debug 使用 5、8086汇编 段寄存器 6、8089…

    技术杂谈 2023年6月1日
    083
  • 一元线性回归代码实现

    在代码中需要去预测一些数据,就用到了线性回归方程,其关键是最小二乘 根据公式把代码实现了一下,虽然可以用别人封装好的函数实现,但还是想自己写出来强化记忆 -*- coding: u…

    技术杂谈 2023年6月21日
    092
  • 设计模式 14 模板模式

    模板模式(Template Pattern)属于 行为型模式 在生活中常常会遇到这样的情况,做某一件事情,有些步骤是固定的,有些步骤的变化的。 比如去医院看病, 挂号和 排队这两个…

    技术杂谈 2023年7月25日
    075
  • Vue学习笔记(五):计算属性

    1 模板与方法的不足 ¶ 有两个输入款,一个输入姓(firstname),一个输入名(secondname),fullname由转换为大写字母的姓、横线、转换为大写字母的名拼接组成…

    技术杂谈 2023年7月24日
    078
  • python xlwings chart模块各种问题今天都遇到了

    问题1、增加图表,按网上搜索的设置图表标题一直报错(pywintypes.com_error: (-2147352567, ‘发生意外。’, (0, &#8…

    技术杂谈 2023年7月11日
    080
  • PyQt5 控件层级关系

    ################################ PyQt5中文网 – PyQt5全套视频教程 # https://www.PyQt5.cn/ # 主讲: 村长 #…

    技术杂谈 2023年5月31日
    084
  • 深度优先搜索入门

    数字的全排列 跳转链接 深度优先搜索就是先走到底走到无路可走然后再进行回溯的算法,用于全排列打表操作,数字的全排列操作就是每一个序列需要包含从1到n所有的数字,但是数字不能重复,不…

    技术杂谈 2023年6月21日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球