2023-最新-发布java工具包到 maven 中央仓库,不踩坑

说明

要想将自己的java工具提交到maven中央仓库并公开,但是maven中央仓库是不允许我们直接上传jar包到它上面的,因此我们只能将jar包发布到它指定的第三方maven仓库,然后这个仓库再将jar包同步到中央仓库。而sonatype的OSSRH仓库就是被认可的第三方仓库之一,所以我们选择把jar包先发布到这上面来。

1、注册

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

注册比较简单,填一下邮箱、姓名、用户名和密码后,点击sign up就完成了。
在这里插入图片描述

2、提交issue

登录完成后,语言可以选择中文,在system dashboard页面中,点击上方导航栏上的新建按钮,就可以创建一个issue,我看也有地方把这个issue称为工单。

要填的东西有点多,我们分两页看,先看第一页:
在这里插入图片描述
填写完后,点击新建即可(我这里由于是已经提交了的,所以是更新按钮)

3、 等待几分钟后,就会收到OSSRH的回复,如下图
在这里插入图片描述
如果是自己的域名,则需要在域名解析中增加 TXT的解析,如下图:
在这里插入图片描述
如果是io.github.mose-x 这种git域名的,则需要新建创建完整的公开的git仓库,如下两个图(网上找的)
在这里插入图片描述
在这里插入图片描述
之后就是等待回复了,回复结果如下,则表示可以推送你的java工具了
在这里插入图片描述
4、 GPG密匙处理
接下来,我们需要使用gpg生成秘钥,在后续包发布jar时会根据生成的秘钥进行校验,因为sonatype也需要对上传这一行为进行权健的校验,避免无意义或恶意上传文件的行为。

a、安装gpg

官网下载地址:https://www.gnupg.org/download/

window版下载地址:https://files.gpg4win.org/gpg4win-4.0.4.exe

我在下载了window版的安装文件后,一路无脑点击下一步就可以完成安装了。

b、创建秘钥

在安装完成gpg后,在命令行下通过指令来生成一个秘钥:
gpg --gen-key
在生成的过程中,首先会要求输入姓名和邮箱地址,在命令行窗口下填完这两个信息后,还会弹窗要求输入一个密码:
在这里插入图片描述
这个密码非常重要,一定要记住,后面在项目deploy的时候还会用到。填完后继续,秘钥就会成功生成并保存在本地目录下了:
在这里插入图片描述
c、上传秘钥

在秘钥生成完后,我们需要把公钥上传到公共服务器供sonatype验证,可以通过下面的命令将公钥上传:
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys XXXXX

虽然我这里一次就上传成功了,但是在看其他教程的过程中,也可能会出现失败的情况,这种情况可以尝试上传到其他的存放公钥的服务器:
● pool.sks-keyservers.ne
● keys.openpgp.org
● pgp.mit.edu

端口的话都是11371,这些公钥服务器间会同步它们的数据给其他服务器,所以只要上传成功到其中一台就行。

5、 maven设置
maven 设置

接下来需要修改本地maven的配置,为了保险起见,我建议大家最好同时修改.m2和conf目录下的配置文件,否则有可能出现一些奇怪的问题。

a、server

首先在配置文件中添加一个server节点,配置sonatype的用户名及密码:

<servers><server><id>ossrh</id><username>${sonatype username}</username><password>${sonatype password}</password></server>
</servers>

b、profile

接着添加一个profie节点,配置gpg信息,这里就需要填入在生成gpg秘钥过程中,我们在弹窗中输入的密码了:

<profiles><profile><id>ossrh</id><properties><gpg.executable>gpg</gpg.executable><gpg.passphrase>${弹窗输入的那个密码}</gpg.passphrase></properties></profile>
</profiles>
<activeProfiles><activeProfile>ossrh</activeProfile>
</activeProfiles>

在修改完成后,可以在命令行窗口下,通过命令查看我们修改过的配置是否已经生效了:

mvn help:effective-settings

如果显示的内容和配置文件中的一样,那么恭喜,后面就只还剩下亿点点工作了。

6、 项目pom修改

在maven环境修改完成后,我们还需要对项目的pom文件进行一些修改。

a、基础信息

如果我们之前的代码中,groupId和sonatype上注册的不一致,那么需要修改项目的groupId改为一致。既然都要发布了,顺便也把version改为release版本吧。

<groupId>io.github.trunks2008</groupId>
<artifactId>ulquiorra-cache</artifactId>
<version>0.0.1-RELEASE</version>

b、distributionManagement
添加distributionManagement信息,声明要打包到sonatype的maven仓库中去。

<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>

c、plugins

这里需要添加各种plugin插件,除了常用的maven-compiler和maven-deploy插件外,还需要下面几个关键插件:
● nexus-staging-maven-plugin:sonatype插件,用来将项目发布到中央仓库使用
● maven-source-plugin:生成java source.jar文件
● maven-javadoc-plugin:生成java doc文档
● maven-gpg-plugin:对文件进行自动签名

使用到的全部插件详细配置如下,直接拷到项目中就可以使用:

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>UTF-8</encoding></configuration></plugin><!-- sonatype插件,发布使用--><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><!-- 生成java source.jar --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><id>attach-sources</id><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- 生成java doc文档 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.9.1</version><configuration><show>private</show><nohelp>true</nohelp><charset>UTF-8</charset><encoding>UTF-8</encoding><docencoding>UTF-8</docencoding><additionalparam>-Xdoclint:none</additionalparam></configuration><executions><execution><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin><!-- 工程文件自动签名--><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><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin>
</plugins>

至于在idea中,插件经常下载失败报红线的问题,个人测试可以先把它们加到dependencies中拉取下来,成功率能高不少…

d、开源签名证书

添加license信息,使用Apache Licene 2.0 协议就行。

<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>

e、仓库信息

在这里填写一下项目的地址,把我们的github仓库地址贴上去就可以了。

<scm><url>https://github.com/mose-x/query-dsl-plus</url><connection>scm:git@github.com/mose-x/query-dsl-plus.git</connection><developerConnection>scm:git@github.com/mose-x/query-dsl-plus.git</developerConnection>
</scm>

f、开发人员信息

补充开发者的个人信息,虽然估计也没什么人会联系我就是了。

<developers><developer><name>mose-x</name><email>mose-x@qq.com</email><organization>https://github.com/mose-x</organization><timezone>+8</timezone></developer>
</developers>

g. 补充额外信息

<name>query-dsl-plus</name>
<description>a tool about bilayer cache</description>
<url>https://github.com/mose-x/query-dsl-plus</url>

h. 打包发布
java程序中执行 clean deploy

mvn clean deploy -DskipTests -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

出现如下,即成功
在这里插入图片描述
并且在OSSRH中也能收到反馈
在这里插入图片描述
结果:
在这里插入图片描述

然后就是等待了!


账号密码和上面注册的ossrh一致
https://s01.oss.sonatype.org

一般30分钟后能查看
https://repo1.maven.org/maven2/

一般4小时后能查看
https://search.maven.org/

一般24小时后能查看
https://mvnrepository.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7887.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS负载均衡群集与LVS-NAT部署实战配置

文章目录 一.什么是集群1.群集的含义 二.集群使用在那个场景三.集群的分类1.负载均衡器群集2.高可用群集3.高性能运算群集 四.负载集群的架构1.第一层&#xff0c;负载调度器2.第二层&#xff0c;服务器池3.第三层&#xff0c;共享存储 五.负载均衡集群的工作模式1.地址转换 &a…

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…

Hive详解

一 Hive基本概念 1 Hive简介 学习目标 - 了解什么是Hive - 了解为什么使用Hive1.1 什么是 Hive Hive 由 Facebook 实现并开源&#xff0c;是基于 Hadoop 的一个数据仓库工具&#xff0c;可以将结构化的数据映射为一张数据库表 &#xff0c;并提供 HQL(Hive SQL)查询功能&…

二、Spring Cloud Eureka 简介、快速入门

注册发现中心 Eureka 来源于古希腊词汇&#xff0c;意为“发现了”。在软件领域&#xff0c; Eureka 是 Netflix 在线影片公司开源的一个服务注册与发现的组件&#xff0c;和其他 Netflix 公司的服务组件&#xff08;例如负载均衡、熔断器、网关等&#xff09; 一起&#xff0…

转载-【AI思维空间】Chat2DB 一款开源数据库客户单工具

卸载 Navicat&#xff0c; xxx 又开源了一款数据库神器&#xff0c;太炸了 Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2D…

64MHz 闪存STM32G0B1CEU6(STM32G0B1CCU6)STM32G0B1CBU6引脚配置图、32位微控制器

STM32G0B1 32位微控制器具有最高512KB嵌入式闪存和144kB RAM存储器。该器件采用48-UFQFPN 引脚封装。它支持USB全速主机/设备、集成USB Type-C控制器和收发器、FDCAN协议以及多达8个UART。 STM32G0 32位微控制器 (MCU) 适合用于消费、工业和家电领域的应用&#xff0c;并可随时…

Apache组件POI,将图片下载到Excel文件中并导出。

在日常的工作中&#xff0c;有时我们会遇到需要将数据库表中图片字段下载到Excel中的需求&#xff0c;为方便各位小伙伴今后的开发工作&#xff0c;我将分享出自己写的代码&#xff0c;并指出图片下载到Excel文件中的性能瓶颈问题。 在文章末尾有我上传到 Gitee 上的 Demo案例&…

Redis高可用——哨兵模式

Redis——哨兵模式 一、Redis 哨兵模式1.哨兵模式的作用2.故障转移机制3.主节点的选举 二、搭建Redis 哨兵模式1.修改 Redis 哨兵模式的配置文件&#xff08;所有节点操作&#xff09;2.启动哨兵模式3.查看哨兵信息4.故障模拟5.验证结果 一、Redis 哨兵模式 主从切换技术的方法…

少数人的晚餐

这不是影评。 这是过去现在和未来都必然发生的事情。 如下这句话选自这部电影&#xff1a; P-Power M-Money K-knowledge 但本文与电影无关。 有一句大家经常听到的话&#xff1a; “群众的眼睛是雪亮的” 但事实上更普遍存在的是&#xff1a; P一定掌握在少数人手中&…

数据库性能测试报告总结模板

目录 1计划概述 2参考资料 3术语解释 4系统简介 5测试环境 6测试指标 7测试工具和测试策略 8测试数据收集 9测试结果数据以及截图 9.1Jmeter性能指标 9.2硬件指标图 10 测试结论 需要完整报告模板记得文章末尾找我哦。 1计划概述 目的&#xff1a;找出系统潜在的…

Elasticsearch集群

单点的问题 单台机器存储容量有限&#xff0c;无法实现高存储。 单服务器容易出现单点故障&#xff0c;无法实现高可用。 单服务的并发处理能⼒有限&#xff0c;无法实现高并发。 集群的结构 数据分片:把数据拆分成多份&#xff0c;每一份存储到不同机器节点&a…

[Flask] Cookie与Session

由于HTTP的无状态性&#xff0c;为了使某个域名下的所有网页能够共享某些数据&#xff0c;Cookie和Session应运而生 1.Cookie对象 HTTP是无状态(stateless)协议&#xff0c;一次请求响应结束后&#xff0c;服务器不会留下任何关于对方状态的信息 也就是说&#xff0c;尽管在…