如何向Maven中央仓库提交自己的Jar包(发布自己的Jar包到中央仓库)

文章目录

  • 注册账号
  • GPG 安装
    • 安装
    • 生成密钥
    • 上传公钥
  • Maven配置
  • 上传到Maven仓库
    • 修改项目的配置,填写基本信息
    • 执行编译命令
    • 登录网站配置发布
    • 项目中应用
  • 遇到的问题解决方法

本文将介绍如何将自己的jar包发布至公共的中央仓库,通过maven方式进行引用

注册账号

注册地址
https://issues.sonatype.org/secure/Signup!default.jspa
填写基础信息
在这里插入图片描述
这里我使用gitee做提交,网络不太好连GitHub有些卡,逻辑是一样的。
点击创建
在这里插入图片描述
填入相关信息
在这里插入图片描述
在这里插入图片描述
填写信息说明:

字段填写内容
Summary概要(写jar包是做什么用的,可以中文)
Description描述(详细描述jar包是做什么用的,可以与Summary相同,可以中文)
Group Ide.g. com.gitee.jast (这里使用gitee做demo)
Project URLe.g. https://gitee.com/jastee/jast-tool
SCM urle.g. https://gitee.com/jastee/jast-tool.git
Proejct选择 Community Support - Open Source Project Repository Hosting (OSSRH)
Issue Type选择 New Project

填写完成点击create创建

提交完成之后状态为开放
在这里插入图片描述
英文版如下,后续用英文版进行介绍
在这里插入图片描述

然后等待官方人员审核,随后官方人员回复让我们在gitee上创建一个空项目验证该gitee是自己的账号。(期间很尴尬,我创建完了项目没设置公开权限,自己能访问他不能访问,我就一直问他,他也不说啥原因,就让我创建空项目。。。)
在这里插入图片描述
当状态变成Status:RESOLVED则是可以发包了
在这里插入图片描述

GPG 安装

安装

brew install gpg
如果在线安装不了则可以直接下载(我是在线安装的) https://gpgtools.org/

生成密钥

# 根据提示输入用户名,邮箱,密码 要记住后面需要用
gpg --gen-key

查看生成的密钥

mac@Mac ~ % gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0  有效性:  1  已签名:  0  信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2023-10-23 进行
/Users/mac/.gnupg/pubring.kbx
-----------------------------
pub   ed25519 2021-10-23 [SC] [有效至:2023-10-23]1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
uid             [ 绝对 ] jast <745925668@qq.com>
sub   sb11111 2021-10-23 [E] [有效至:2023-10-23]

1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325(这里公钥为了演示我随便改了下,我实际的公钥不是这个,上传是要传实际的)这个就是公钥一会要上传到密钥服务器

上传公钥

mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 正在发送密钥 AAAAAAAAAAAAAAAAAAAF325 到 hkp://keyserver.ubuntu.com:11371

查看上传的公钥

# 网络原因可能会接收失败,多执行两次可以查看到成功
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 从公钥服务器接收失败:No data
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 密钥 D1BC8A428AA3F325:“jast <745925668@qq.com>” 未改变
gpg: 处理的总数:1
gpg:              未改变:1

Maven配置

在Maven的setting.xml中添加账号信息

  <server> <id>ossrh</id><username>第一步注册的账号</username><password>第一步注册账号的密码</password></server>

上传到Maven仓库

修改项目的配置,填写基本信息

Java项目中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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gitee.jastee</groupId><artifactId>jast-tool</artifactId><version>0.0.2</version><name>jast-tool</name><description>Java 工具</description><url>https://gitee.com/jastee/jast-tool</url><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><issueManagement><system>gitee</system><url>https://gitee.com/jastee/jast-tool/issues</url></issueManagement><scm><connection>scm:git:https://gitee.com/jastee/jast-tool.git</connection><developerConnection>scm:git:https://gitee.com/jastee/jast-tool.git</developerConnection><url>https://gitee.com/jastee/jast-tool</url></scm><developers><developer><name>Jast</name><email>745925668@qq.com</email><url>https://gitee.com/jastee</url></developer></developers><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><distributionManagement><repository><id>ossrh</id>
<!--            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>--><url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository><snapshotRepository><id>ossrh</id>
<!--            <url>https://oss.sonatype.org/content/repositories/snapshots</url>--><url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url></snapshotRepository></distributionManagement><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><configuration><mavenExecutorId>forked-path</mavenExecutorId><useReleaseProfile>false</useReleaseProfile><arguments>-Psonatype-oss-release</arguments></configuration></plugin><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><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></plugins></pluginManagement><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>cobertura-maven-plugin</artifactId><version>2.7</version><configuration><formats><format>html</format><format>xml</format></formats><check/></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version><configuration><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId></plugin></plugins></build><profiles><profile><id>release</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.6</version><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build></profile></profiles></project>

执行编译命令

编译过程中需要输入之前我们密钥的密码

> mvn clean deploy -DskipTests=true -P release
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  50.101 s
[INFO] Finished at: 2021-10-24T10:15:54+08:00
[INFO] ------------------------------------------------------------------------

可能会遇到的问题问题

打包上传报错

mvn clean deploy -DskipTests=true -P release
gpg: 签名时失败: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device

解决方法:
设置环境变量

export GPG_TTY=$(tty)

重新执行mvn clean deploy -DskipTests=true -P release会弹出一个密码输入界面,输入我们之前设置密钥的密码即可

登录网站配置发布

https://s01.oss.sonatype.org/#stagingRepositories

点击 Staging Repositories -> 勾选我们要发布的jar包 -> 点击Close
在这里插入图片描述
在这里插入图片描述
提交完稍等一会刷新就可以看到提示statusclosed,可以进行下一步
在这里插入图片描述
点击release
在这里插入图片描述
搜索我们发布的Jar包
在这里插入图片描述
可以看到我们发布的Jar包,每个版本的包只能提交一次,不能重复提交到公共仓库
注意:这里不要发布成SNAPSHOT版本了
在这里插入图片描述
在中央仓库直接查看也可以看到我们传的jar包
在这里插入图片描述

项目中应用

加入依赖,进行下载,发现jar包成功下载
在这里插入图片描述
测试应用,可以正常使用
在这里插入图片描述
需要更新jar包时,我们修改版本号mvn clean deploy -DskipTests=true -P release然后提交到仓库发布,执行 closed -> release 即可。

上传完成后,我们可以直接在pom.xml中引用,在https://mvnrepository.com/ 搜索到需要等几个小时上传完不能直接看到。

在这里插入图片描述

至此我们上传到中央仓库成功。

遇到的问题解决方法

中间遇到了个小插曲
上传之后提示了三个错误
在这里插入图片描述
点击Activity查看
在这里插入图片描述
提示说少各种POM信息

Invalid POM: /com/gitee/jastee/jast-tool/0.0.1/jast-tool-0.0.1.pom: Project name missing, Project description missing, Project URL missing, License information missing

问题原因:
pom.xml中文件少配置了相关参数,配置一定要和我上面列的一样。

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

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

相关文章

数据结构实验之串三:KMP应用

题目描述 有n个小朋友&#xff0c;每个小朋友手里有一些糖块&#xff0c;现在这些小朋友排成一排&#xff0c;编号是由1到n。现在给出m个数&#xff0c;能不能唯一的确定一对值l和r(l < r)&#xff0c;使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数&#xff1f;输…

C++读写锁

读写锁实际是一种特殊的自旋锁&#xff0c;它把对共享资源的访问者划分成读者和写者&#xff0c;读者只对共享资源进行读访问&#xff0c;写者则需要对共享资源进行写操作。 读写锁实际是一种特殊的自旋锁&#xff0c;它把对共享资源的访问者划分成读者和写者&#xff0c;读者只…

List和Set以及Map的选用

选用哪一种容器取决于每一种容器的存储特点以及当前业务的需求: List: 单一元素集合. 允许元素重复/记录元素的添加顺序. Set:单一元素集合. 不允许元素重复/不记录元素的添加顺序. 既要不重复,又要保证先后顺序:LinkedHashSet. Map: 双元素集合. 如果存储数据的时候,还得…

FastDFS文件服务器安装

文章目录环境准备使用的系统软件磁盘目录安装libfastcommon安装FastDFS安装fastdfs-nginx-module安装nginx单机部署tracker配置storage配置client测试配置nginx访问分布式部署tracker配置storage配置client测试配置nginx访问启动防火墙trackerstoragenginx检测集群说明配置文件…

学密码学一定得学程序

题目描述 曾经&#xff0c;ZYJ同学非常喜欢密码学。有一天&#xff0c;他发现了一个很长很长的字符串S1。他很好奇那代表着什么&#xff0c;于是神奇的WL给了他另一个字符串S2。但是很不幸的是&#xff0c;WL忘记跟他说是什么意思了。这个时候&#xff0c;ZYJ不得不求助与伟大的…

boost::shared_mutex

前一篇介绍的条件变量可以进行进程间通信&#xff0c;用来实现生产者/消费者模型。今天介绍的共享互斥量用来实现缓冲区读写模型&#xff0c;与生产者/消费者模型不同的地方是&#xff0c;消费者消费产品后&#xff0c;被消费的产品就不存在了&#xff0c;所以消费者线程也要互…

Map集合类

映射的数学解释: 设A、B是两个非空集合&#xff0c;如果存在一个法则f&#xff0c;使得对A中的每个元素a&#xff0c;按法则f&#xff0c;在B中有唯一确定的元素b与之对应&#xff0c;则称f为从A到B的映射&#xff0c;记作f&#xff1a;A→B。 映射关系(两个集合):A集合和B集…

github 国内加速镜像

GitHub 镜像访问 这里提供两个最常用的镜像地址&#xff08;别登录账号&#xff09;&#xff1a; https://github.com.cnpmjs.org https://hub.fastgit.org 也就是说上面的镜像就是一个克隆版的Github&#xff0c;你可以访问上面的镜像网站&#xff0c;网站的内容跟Github是完…

数据结构实验之二叉树二:遍历二叉树

题目描述 已知二叉树的一个按先序遍历输入的字符序列&#xff0c;如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。 输入 连续输入多组数据&#xff0c;每组数据输入一个长度小于50个字符的字符串。 输出 每组输入数据对应输出2行&#x…

Socket select模型

Windows socket select模型开发。 套接字select模型是一种比较常用的IO模型。利用该模型可以使Windows socket应用程序可以同时管理多个套接字。 使用select模型&#xff0c;可以使当执行操作的套接字满足可读可写条件时&#xff0c;给应用程序发送通知。收到这个通知后&#x…

Set实现类性能对比

Set接口的实现类: 共同的特点: 1):都不允许元素重复. 2):都不是线程安全的类. 解决方案:Set s Collections.synchronizedSet(Set对象); HashSet: 不保证元素的先后添加顺序. 底层才有的是哈希表算法,查询效率极高. 判断两个对象是否相等的规则: 1):equals比较为true. …

RSocket协议初识

文章目录前言RSocket是什么&#xff1f;RSocket设计目标是什么&#xff1f;RSocket与其他协议有什么区别&#xff1f;对比Http1.x对比Http2.x对比grpc对比TCP对比WebSocket结论RSocket适用于哪些场景&#xff1f;1、移动设备与服务器的连接。2、微服务场景。3、由于微服务和移动…

HugeGraph Server/Hubble安装使用

文章目录HugeGraph Server1 概述2 依赖2.1 安装JDK-1.83 部署3.1 下载tar包4 安装启动4.1 解压4.2 配置Hbase5 访问Server5.1 服务启动状态校验6 停止Server7 多图配置HugeGraph-Hubble 基于Web的可视化图形界面1.概述2.安装3 使用3.1创建图HugeGraph Server 1 概述 HugeGrap…

Socket模型

两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1、 两种I/O模式 阻塞模式&#xff1a;执行I/O操作完成前会一直进行等待&#xff0c;不会将控制权交给程序。套接字默认为阻塞模式。可以通过多线程技术进行处…

数据结构实验之二叉树的建立与遍历

题目描述 已知一个按先序序列输入的字符序列&#xff0c;如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树&#xff0c;最后求出叶子节点个数和二叉树深度。 输入 输入一个长度小于50个字符的字符串。输出 输出共有4行&#xff1a; 第1行输出…

Mysql 集群双主双从安装使用详细讲解

文章目录下载Mysql安装单机Mysql配置Mysql集群双Master配置master1配置master2配置配置说明双Slave配置Slave1配置Slave2配置双 Master 机上创建账号&#xff0c;并授权远程复制查询Master1的状态查询Master2的状态双Slave机上执行 change master 同步Master数据Slave1 复制 Ma…

vs2010常见错误记录

&#xff08;1&#xff09;在Debug模式下正常&#xff0c;在Release模式下程序出现异常 可能原因&#xff1a;配置的链接dll有问题&#xff0c;后缀带d和不带d混淆&#xff1b;在Release模式下类中的变量不会自动进行初始化&#xff0c;需要手动初始化&#xff1b;

java中的IO操作之File类

Java的集合框架: 类和接口存在于java.util包中. Java的IO: 类和接口存在于java.io包中. 学习方法: 文档在手,天下我有! ----------------------------------------------------------------------------------------- 讲IO操作之前,必须要先讲File类(文件/目录…

数据结构实验之二叉树三:统计叶子数

题目描述 已知二叉树的一个按先序遍历输入的字符序列&#xff0c;如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。 输入 连续输入多组数据&#xff0c;每组数据输入一个长度小于50个字符的字符串。 输出 输出二叉树的叶子结点个数。 示例输入 ab…

企业需要的C++程序员

今天对智联招聘网站和前程无忧招聘网站对“任职要求"一栏进行了相关技术要求作了简要的统计&#xff0c;主要提取的是在任职要求中明确提到的信息&#xff0c;招聘城市针对长沙和深圳&#xff0c;招聘公司为随机抽取&#xff0c;列了以下技术要求出现的次数。希望在自己的…