欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于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
  • 本次涉及的软件信息如下:
  1. 操作系统:macOS Monterey(12.0.1)
  2. JDK:1.8.0_312
  3. 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: zq2599@gmail.com
You selected this USER-ID:"zq2599 <zq2599@gmail.com>"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 <zq2599@gmail.com>
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的账号密码:
<server><id>ossrh</id><username>zq2599</username><password>12345678</password>
</server>
  • 在profiles下增加一个profile节点,gpg.passphrase的内容是刚才创建gpg秘钥时输入的密码:
<profile><id>gpg</id><properties><!-- 由于我的电脑装的gpg2,所以需要指定执行gpg2,否则会报错 --><gpg.executable>gpg2</gpg.executable><gpg.passphrase>abcdefgh</gpg.passphrase></properties>
</profile>
  • 涉及到账号密码的全局配置就完成了,接下来打开您的java工程,咱们去修改pom.xml的配置

8. maven项目配置

  • 首先要搞清楚发布仓库的地址在哪,官方指导如下,给出了snapshot和release的仓库地址:
  • 以下是java工程的pom.xml文件,需重点关注的地方都有中文注释,请不要漏掉带序号的注释,这些都是最关键的配置,这种注释共11个:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>io.github.zq2599</groupId><artifactId>opencv-linux</artifactId><version>0.0.3</version><name>opencv-linux</name><description>opencv-linux</description><!-- 1. url必须要有,不然远程提交时会返回错误 --><url>https://github.com/zq2599/opencv-client</url><properties><java.version>1.8</java.version></properties><packaging>jar</packaging><!-- 2. 开源证书 --><licenses><license><name>The Apache Software License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0.txt</url><distribution>repo</distribution></license></licenses><!-- 3. 源码仓库信息 --><scm><connection>scm:git:git@github.com:zq2599/opencv-client.git</connection><developerConnection>scm:git:git@github.com:zq2599/opencv-client.git</developerConnection><url>https://github.com/zq2599/opencv-client/tree/main</url></scm><!-- 4. 开发人员信息 --><developers><developer><name>zq2599</name><email>zq2599@gmail.com</email><organization>https://github.com/zq2599</organization><timezone>+8</timezone></developer></developers><!-- 5. 上传的仓库地址,以及使用哪个账号密码配置 --><distributionManagement><snapshotRepository><id>ossrh</id><url>https://s01.oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository><repository><id>ossrh</id><url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository></distributionManagement><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency></dependencies><build><!-- 配置好每个插件的属性 --><pluginManagement><plugins><!-- 6. 上传到sonatype的插件 --><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.7</version><extensions>true</extensions><configuration><!-- 这里的id必须要和全局配置中的server一致 --><serverId>ossrh</serverId><!-- 这个地址,一定要和issue的评论中给出的地址一致! --><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><!-- 如果希望发布后自动执行close和release操作,此处可以调整为true --><autoReleaseAfterClose>false</autoReleaseAfterClose></configuration></plugin><!-- 7. 上传源码的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.1.0</version><inherited>true</inherited><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions><configuration><excludeResources>true</excludeResources><useDefaultExcludes>true</useDefaultExcludes></configuration></plugin><!-- 8. 生成doc文档的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.0.0</version><inherited>true</inherited><executions><execution><id>bundle-sources</id><phase>package</phase><goals><goal>jar</goal></goals></execution></executions><configuration><maxmemory>1024</maxmemory><encoding>UTF-8</encoding><show>protected</show><notree>true</notree><!-- Avoid running into Java 8's very restrictive doclint issues --><failOnError>false</failOnError><doclint>none</doclint></configuration></plugin><!-- 9. 编译构建maven工程的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></pluginManagement><!-- 10. 确定要使用哪些插件 --><plugins><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin></plugins></build><profiles><profile><id>release</id><build><plugins><!-- 11. 生成签名,确定使用那个gpg秘钥 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.5</version><executions><execution><!-- 必须和配置中的gpg校验id一致 --><id>gpg</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build></profile></profiles></project>

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库那样使用这个库了,用法就是添加这个依赖:
<dependency><groupId>io.github.zq2599</groupId><artifactId>opencv-linux</artifactId><version>0.0.3</version>
</dependency>

踩坑记录

  • 现在已完成了所有的操作,回顾一下,整个过程其实相对比较顺利,只遇到了三个小坑需要您注意:
  1. 同步gpg秘钥到云端的时候,网上有文章提到用hkp://subkeys.pgp.net,我在使用该地址的时候一直在报错,改为hkp://keyserver.ubuntu.com:11371之后上传成功
  2. maven工程的pom.xml文件中,一定要有url节点,如下图,否则会在同步到云端的时候报错Project url missing
  3. 发布的操作是在网页上进行的,网上有的文章提到网站是https://oss.sonatype.org,最初我也打开了该网页并尝试登录,可惜始终登录失败,最终,在issue的评论上发现如下图红框,要登录的网站是https://s01.oss.sonatype.org
  • 至此,所有操作都已完成,如果您正在将自己的java库发布到maven中央仓库,希望本文能给您一些参考

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

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

  1. 发布构建到maven中央仓库

    JAVA开源软件开发必备技能 发布构建到maven中央仓库的方法和详细步骤 sonatype介绍 向sonatype提交申请 配置maven GPG签名 发布版本 通知sonatype sonatyp ...

  2. maven中央仓库找不到jconsole-1.8.0.jar和tools-1.8.0.jar包

    maven-update时勾选Force Update of Snapshots/Releases 转载于:https://my.oschina.net/xyzuncle/blog/3047936

  3. 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

    相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...

  4. 如何发布自己的项目到Maven中央仓库?

    在Maven项目中,90%以上的jar包是通过pom文件直接从开源仓库中获取依赖jar包文件,然后在项目中进行集成使用. 此时如果你有一个开源项目,那么如何将该开源项目发布到Maven中央仓库,让其他 ...

  5. 发布个人项目jar包到maven中央仓库详解

    发布个人项目jar包到maven中央仓库详解 1.在sonatype提交发布工单(Issue) sonatype是由社区支持的开源项目托管服务(Open Source Project Reposito ...

  6. idea maven打jar包_Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库

    摘要 Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Ma ...

  7. 如何将JAR包发布到Maven中央仓库?

    将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- ht ...

  8. 如何将自己的代码发布到Maven中央仓库?

    去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...

  9. 发布/上传Jar包到Maven中央仓库 - 史上最详细

    发布 Jar 包到 Maven 中央仓库 在项目开发过程中,我们常常会使用 Maven / Gradle 从仓库拉取开源的第三方 jar 包,可能是私有仓库,可能是 Maven 中央仓库,也可能是第三 ...

最新文章

  1. 1、为什么使用Long时,推荐多使用valueOf方法,少使用parseLong方法
  2. 磁盘占用百分百?Windows 10必做各项优化
  3. open函数和close函数的使用
  4. OpenCL的安装与配置
  5. TCP、UDP相关协议使用的端口号
  6. python常用包有哪些品牌_python 常用包总结
  7. linux awk使用
  8. 二叉树相关面试题(二)
  9. Kinect+OpenNI学习笔记之13(Kinect驱动类,OpenCV显示类和手部预分割类的设计)
  10. Coursera营养学课程考试小抄
  11. 吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
  12. 100首英文经典歌曲
  13. HDAO去中心化社区自治平台,助力明星项目启航
  14. linux内核时区文件编辑器——ZIC时区编辑
  15. 计算机视觉编程 第六章 图像聚类
  16. 华为/H3C常用巡检命令
  17. 出现Cannot refer to the non-final local variable guoDeGang defined in an enclosing scope
  18. 图像分割经典算法--《分水岭算法》(Watershed)
  19. 服务端监控工具:Nmon使用方法
  20. python 优劣解距离法(TOPSIS)

热门文章

  1. Uos统信系统 CA根证书搭建
  2. 2021营销案例盘点,这些品牌的中秋营销创意,绝了!
  3. 明明价格下降了,为什么你却花了更多钱?
  4. 打印机显示服务器磁盘已满,打印机无法打印显示内存已满是怎么回事,怎么解决?...
  5. 详细解读【虚拟内存】
  6. 国企领导与山大王的区别 (转载黑色传奇)
  7. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解
  8. 计算机程序创始人阿达洛芙莱斯
  9. 安卓指纹支付(指纹识别)
  10. 初识Docker:(5)Docker自定义镜像