当前位置: 首页 > news >正文

发布自己的 jar 包到 Maven 中央仓库 ( mvnrepository.com )

笔者以自己的开源项目:https://github.com/woodwhales/woodwhales-common 为例,演示如何将自己的开源 jar 发布至 maven 中央仓库,即可在 https://mvnrepository.com/ 官网中搜索到。

注册 sonatype 的 Jira 帐号

SonaType是什么呢?提供开源项目仓库托管( Open Source Software Repository Hosting,简称 OSSRH )服务。

注意:记录用户名和账号密码,后续发布 jar 文件时会使用到。

注册地址: https://issues.sonatype.org/secure/Signup!default.jspa

注册很简单,重要的是邮箱地址一定要正确,issue 有任何变动都会通过邮件通知。

sonatype 网站设置中文语言

sonatype 的 Jira 帐号注册成功之后,登录进入首页界面如下:

点击头像的个人信息设置:

点击 preferences 设置按钮:

设置语言及时区:

申请创建个人仓库工单

点击页面顶部的创建按钮,创建工单:

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

问题类型选择:New Project

填写表单信息:

表单中有如下信息需要填写:

  • Summary:描述自己包的作用
  • Description:可写可不写,也是具体描述的
  • Group Id:笔者有自己的域名,所以填写的是 cn.woodwhales.common,如果没有自己的域名,可以填写:github.xxx.yyy 或者 gitee.xxx.yyy。
  • Project URL:填写你的项目的 github 或者 gitee 地址
  • SCM url:填写你项目的 github 或者 gitee 的克隆地址

读者可以参考笔者的工单进行填写:https://issues.sonatype.org/browse/OSSRH-73359

工单提交之后需要等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明域名或者 gitee 或者 github 空间是你的。笔者的要求域名解析配置,并且在 github 仓库中临时创建一个的名称为:OSSRH-73359的公开仓库:

管理员很亲切地给了怎么域名添加解析记录的指导说明:https://central.sonatype.org/faq/how-to-set-txt-record/

笔者的域名在腾讯云平台,进入域名解析平台,添加解析记录,稍等片刻即可收到管理员再次审核通过的信息:

在 github 仓库中创建临时仓库:

因为已经完成了验证,所以笔者在完成本博文之后就删除了这个临时仓库。

当上述步骤按照管理员要求验证之后,稍等片刻,就会收到管理员验证通过的信息:

到此,我们可以按照管理员给的配置指南进行下一步操作了,可以不再使用 sonatype 网站。

值得注意是的是,工单的状态也变为已解决状态。

发布指南

参考管理员给的配置指南:https://central.sonatype.org/publish/publish-guide/#deployment,笔者是 maven 工程,所以点击 maven 工程配置指南:https://central.sonatype.org/publish/publish-guide/#deployment

读者如果是其他版本控制工具,找到对应的文档自行配置即可,思路大致相同。

配置 maven 的 settings.xml

在自己本机的 maven 配置文件 settings.xml 中配置<server>

<settings><servers><server><id>ossrh</id><username>sonatype 的 Jira 帐号</username><password>sonatype 的 Jira 帐号的密码</password></server></servers>
</settings>

笔者建议这个<id>ossrh</id> 不要修改,就使用官方指南的即可。

GPG 签名配置

下载 GPG

sonatype 要求发布的 jar 需要使用 GPG 签名,所以需要安装 GPG,并生成密钥对。

GPG 下载地址:

  • windows 环境:https://www.gpg4win.org/download.html

  • mac 环境:https://gpgtools.org/

GPG 官网有各个环境的安装包下载地址:https://gnupg.org/download/index.html

安装 GPG

安装 GPG 很简单,一直下一步即可安装成功。安装过程中要记得安装目录,后续会有使用到这个路径。

笔者安装在了 c 盘符下:

值得注意的是 GPG 会自动注册到系统环境变量中,所以我们可以直接在 cmd 窗口中验证是否安装成功:

展示出 GPG 版本信息表示安装成功。另外,安装成功之后,桌面会出现一个快捷图标:Kleopatra

生成 GPG 证书(密钥对)

关于密码学相关知识,请移步至笔者的另一篇博文:漫谈密码技术

可以使用 GPG 命令在 cmd 窗口生成,也可以打开 Kleopatra 桌面程序生成。

方式1:命令生成

命令行生成生成秘钥: gpg --gen-key

按提示输入名字, 如:woodwhales,邮箱 woodwhales@163.com,然后选择 (O) kay,输入英文字母 o

弹出设置密码框,记住这个密码,稍后会使用到:

密码输入完成之后,程序生成密钥对,并展示出 GPG 公钥签名:

查看本系统已生成的所有密钥对信息: gpg --list-keys

上图中有俩个公钥信息,第一个是笔者写本博文之前创建的,第二个是本博文操作创建的。

方式2:可视化生成

可视化的生成密钥对比命令行生成友好很多,并且直接展示已生成的所有密钥对信息:

点击创建个人密钥对:

输入密钥名称、邮箱,勾选设置密码:

设置密码:

生成成功

系统中又多了一个密钥对。

如果确认证书不需要使用了,可以右键点击删除。注意:一定要确认好,物理删除了可创建不会回来相同的密钥对了!

上传公钥证书至公钥服务器

使用 cmd 命令执行:

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥签名

验证是否成功地上传到了两个服务器:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥签名

可能出现的上传失败问题

命令行上传至 hkp://pool.sks-keyservers.net 可能出现[gpg: keyserver receive failed: No name](https://stackoverflow.com/questions/66217436/gpg-keyserver-receive-failed-no-name)问题。

解决方案1

可以参考:https://central.sonatype.org/publish/requirements/gpg/#distributing-your-public-key 文档中的镜像替换,即将hkp://pool.sks-keyservers.net 替换为镜像列表中的镜像。

keyserver.ubuntu.com
keys.openpgp.org
pgp.mit.edu
解决方案2

笔者创建至 hkp://pool.sks-keyservers.net 失败了,可以使用 Kleopatra 导出公钥,浏览器访问公钥服务器:https://keys.openpgp.org/ 官网,然后上传公钥证书,上传成功之后,服务器会给你的邮件发一封确认邮件。

在搜索框中搜索邮箱得到信息,则表示上传成功:https://keys.openpgp.org/search?q=woodwhales%40163.com

再次配置 maven 的 settings.xml

在自己本机的 maven 配置文件 settings.xml 中再次配置<profile>

<profiles><profile><id>ossrh</id><activation><activeByDefault>true</activeByDefault></activation><properties><gpg.executable>C:\programs\GnuPG\bin\gpg.exe</gpg.executable><gpg.passphrase>上述步骤中创建的密钥对的密码</gpg.passphrase></properties></profile>
</profiles>

上述配置中:

<id>ossrh</id>:和<server>中 sonatype 账号的 id 一致

<gpg.executable>:gpg.exe 绝对路径,如果不配置,可能在后续发布的时候 maven-gpg-plugin 插件报找不到 gpg.exe 错误。

<gpg.passphrase>:上述步骤中创建的密钥对的密码

配置项目中的 pom.xml

在要发布的 maven 工程的 pom.xml中配置:项目名称、描述、开源协议信息、开发者信息、 发布信息、发布插件:

<?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>cn.woodwhales.common</groupId><artifactId>woodwhales-common</artifactId><version>3.5.0</version><name>woodwhales-common</name><!-- 项目描述 --><description>https://github.com/woodwhales</description><url>https://github.com/woodwhales/woodwhales-common</url><properties><java.version>1.8</java.version><!-- 文件拷贝时的编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><licenses><!-- 开源协议 --><license><name>The Apache Software License, Version2.0</name><url>http://www.apache.org/licenses/</url><distribution>repo</distribution></license></licenses><!-- scm --><scm><tag>master</tag><url>https://github.com/woodwhales/woodwhales-common</url><connection>scm:git:git://github.com:woodwhales/woodwhales-common.git</connection><developerConnection>scm:git:git://github.com:woodwhales/woodwhales-common.git</developerConnection></scm><!-- issues --><issueManagement><system>GitHub Issue Management</system><url>https://github.com/woodwhales/woodwhales-common/issues</url></issueManagement><!-- 开发者信息 --><developers><developer><id>woodwhales</id><name>woodwhales</name><email>woodwhales@163.com</email><url>https://woodwhales.cn/</url><timezone>+8</timezone></developer></developers><dependencies>...</dependencies><!-- distributionManagement --><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><build><plugins><!-- maven 打包时附带源码文件插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.2.1</version><executions><execution><id>attach-sources</id><phase>verify</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- 生成 javadoc 插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.9.1</version><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><!-- sonatype staging 插件 --><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.7</version><extensions>true</extensions><configuration><serverId>ossrh</serverId><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration></plugin><!-- maven-gpg 插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.5</version><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build></project>

对 maven 工程执行即可发布 jar 至 maven 仓库,注意工程版本不要带有SNAPSHOT

mvn clean deploy

发布成功之后,可以在 search.maven.org 中搜索到自己刚刚上传的 jar 文件。

并在 https://s01.oss.sonatype.org/#welcome 中使用 sonatype 的 Jira 账号登录,从 https://s01.oss.sonatype.org/content/groups/public/ 和 https://s01.oss.sonatype.org/content/repositories/releases/ 中可以看到发布的 jar 文件。

另外在 https://mvnrepository.com/ 中已可以确认一下 maven central 中也已经同步了:

maven central 仓库:

通知管理员关闭 issue

上述步骤操作完毕之后,能顺利发布 jar 至 releases 仓库,则需要在最开始的工单中评论,请管理员关闭工单。

并将工单的是否已同步至 central 状态改为 Yes:

填写已关闭 issuse

笔者上传自定义开源 jar 文件至 maven 仓库成功之后,在隔一天之后可在 https://mvnrepository.com 网站搜索到该 jar 信息:https://mvnrepository.com/search?q=woodwhales

参考资料

The Central Repository Documentation

发布自己的jar包到Maven中央仓库

GPG 使用 Maven 签名后发送到中央仓库提示 Upload your public key and try the operation

jar maven 中央仓库 GPG问题 deploy 400

gpg: keyserver receive failed: No name

更新JAR到maven仓库 gpg: keyserver send failed: No name

http://www.dtcms.com/a/477866.html

相关文章:

  • 页表 vs. 组相联缓存:内存管理与性能优化的殊途同归
  • 泉州专业建站品牌校园门户网站开发需求分析
  • 版本控制器之Git理论与实战
  • 注册网站时应注意什么域名注册后 免费自建网站
  • wpf passwordbox控件 光标移到最后
  • Linux wlan网络协议栈-路由框架详解
  • 廊坊安次区网站建设公司上海高登联合建设网站
  • 凡科网站手机投票怎么做wordpress vr主题
  • 【ElasticSearch】text 和 keyword 类型区分
  • vue3的组件通信方式汇总
  • PortSwigger靶场之将 XSS 存储到onclick带有尖括号和双引号 HTML 编码以及单引号和反斜杠转义的事件中通关秘籍
  • 哪些方法可以建设网站后台网站模板下载
  • 根据PID获取K8S-Pod名称-反之POD名称获取PID
  • 做网站三年3万块钱论坛搭建一键
  • C#进阶技巧掌握外部进程的启动与控制(一):进程基础与基本操作
  • 昂瑞微:实现精准突破,攻坚射频“卡脖子”难题
  • 延安做网站的公司电话如何用云服务器搭建个人网站
  • shellSort
  • idea一直卡在build不动(Writing class)
  • LSTM自然语言处理情感分析项目(四)整合调用各类与方法形成主程序
  • MySQL为什么选择B+tree索引作为核心索引结构?
  • 在 Windows 11 上使用 JetBrains Rider 2025.2 创建 Avalonia 项目完整指南
  • 隐私保护与数据安全合规(十)
  • 【工业场景】用YOLOv8实现人员打电话识别
  • 丽水建设网站制作几年前我为客户建设网站
  • 主线程 MainLooper 和一般 Looper 的异同?
  • 【论文精读】STAR:基于文本到视频模型的空间-时间增强真实世界视频超分
  • 建设银行的积分网站百度渠道开户
  • 万网 速成网站嘉定品牌网站建设
  • Ruby on Rails 从0 开始入门到进阶到高级 - 10分钟速通版