maven--将jar包上传到maven中央仓库(公库)

原文网址:maven--将jar包上传到maven中央仓库(公库)-CSDN博客

简介

本文介绍怎样将jar包上传到maven中央仓库(公库)。

当自己有一些公共组件时,上传到maven公库是最好的,这样项目里直接引用即可,不需要在多处修改,而且所有人都可以直接使用。

本文环境是:Windows系统,maven3,java8,Idea2023。

1.注册Sonatype JIRA账号

网址:Sign up for Jira - Sonatype JIRA

注意:用户名一定要用英文的。 

2.准备groupid

Maven 用 groupid 来标识项目空间,用域名逆序的方式命名。下面是两种命名的例子,如果有自己的域名,直接使用就可以;如果没有,可以使用 github 等代码托管服务的域名。

  1. www.springframework.org => org.springframework
  2. subdomain.example.com => com.example
  3. my-domain.com => com.my-domain
  4. github.com/abc => io.github.abc

下面是支持个人 groupid 的代码托管服务,假设使用 io.github.myusername ,需要创建一个名为 OSSRH-序列码的公开仓库进行验证(验证成功后可删除)。如果使用自己的域名,后边需要添加 TXT 解析,让maven中央仓库知道你是域名的所有者。

服务groupid相关文档
GitHubio.github.myusernamehttps://pages.github.com/
GitLabio.gitlab.myusernamehttps://about.gitlab.com/stages-devops-lifecycle/pages/
Giteeio.gitee.myusernamehttps://gitee.com/help/articles/4136
Bitbucketio.bitbucket.myusernamehttps://support.atlassian.com/bitbucket-cloud/docs/publishing-a-website-on-bitbucket-cloud/
SourceForgeio.sourceforge.myusernamehttps://sourceforge.net/p/forge/documentation/Project%20Web%20Services/

假设我本处准备的域名是:abc.com。

3.创建JIRA工单

1.创建JIRA工单

新建工单

进入JIRA主页,点击新建:

填写相应内容 

概要的那句话是:

Create and upload project

描述里的那句话是:

Hello, I want to create a new project, and upload to maven center repo.

继续往下滑,还有其他要填写的内容:

然后点击下方的创建

创建后可以看到问题编号:

此时,你会收到一封邮件:通知你成功创建了一条JIRA工单。 

2.收到评论

过了几分钟后,我收到了Sonatype JIRA的邮件,说我收到了一条评论。

点击上边JIRA里创建的JIRA(菜单栏=> 问题),即可看到评论信息:

4.验证域名

1.添加DNS记录

修改DNS,添加一条TXT记录(验证成功后,这个DNS记录删除即可)。

将上边的评论里的OSSRH-xxx复制一下,把它添加到DNS的TXT(主机记录是@,记录值是OSSRH-xxx) 

2.告诉工作人员已经添加

这里我的回复是:I hava added a DNS TXT record to my domain. 

3.工作人员回复

工作人员审核验证完之后会回复你,工单状态会变为“已解决”,就可以上传maven项目了。

一个小时后,邮件里说我收到了JIRA回复,查看JIRA,收到的回复如下:

工单状态变成了“已解决” 

5.配置GPG密钥

1.下载gpg工具

下载地址

https//www.gnupg.org/download/

gpg --version

2.生成密钥 

生成密钥

gpg --gen-key

提示输入名字和邮箱。输入后,再输入O,回车。然后会弹出要输入密码,这里的密码一定要记住,后边要用。(密码是为了保护私钥用的)

红色箭头即生成的公钥,后边要用(密钥有效期为3年,到时要用密码延长有效期(重新生成也可以))。

发送公钥

gpg --keyserver keyserver.ubuntu.com --send-keys 你的公钥

 本处我是:

gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 6C1D0E2XXXXXXXXXEC423

如下:

查看公钥

等几分钟,验证公钥是否发布成功:

​gpg --keyserver keyserver.ubuntu.com --recv-keys 6C1D0E2XXXXXXXXXEC423

 如下:

备注:

忘记了公钥,也可以通过gpg --list-keys查看当前所有的公钥

3.密钥导入导出

在不同的电脑上操作时,可以直接用现成的密钥。这就需要用导出导入功能。

导出

导出公钥

命令格式:

gpg -a -o public-file.key --export keyId : 导出公钥keyId 到 文件 public-file.key中;

-a 为 --armor 的简写,表示密钥以ASCII的形式输出,默认以二进制的形式输出;
-o 为 --output 的简写,指定写入的文件;

gpg -a -o public-file.key --export 6C1D0E2XXXXXXXX7CE3EC423

导出私钥(导出私钥需要输入之前设置的保护私钥密码)

gpg -a -o private-file.key --export-secret-keys 6C1D0E2XXXXXXXX7CE3EC423

导入

导入公钥

gpg --import public-file.key

导入私钥(导入私钥需要输入保护私钥的密码)

gpg --import private-file.key

6.发布JAR包

1.修改settings.xml

添加如下内容

<settings><servers><server><id>ossrh</id><username>JIRA用户名</username><password>JIRA密码</password></server></servers>
</settings><profiles><profile><id>ossrh</id><properties><!--这里填你安装的GnuPG位置--><gpg.executable>D:/Program Files (x86)/GnuPG/bin/gpg.exe</gpg.executable></properties></profile>
</profiles>

2.修改pom.xml

下边标记了“用于发布”的,都是要与发布JAR包有关的配置。

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.13</version><relativePath/></parent><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>{project.artifactId}</name><description>test-util</description><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><scope>provided</scope></dependency></dependencies><build><plugins><!--指定JDK版本--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><!-- <version>3.5.1</version> --><!-- 指定maven编译的jdk版本。对于JDK8,写成8或者1.8都可以 --><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build><!--用于发布:插件和仓库等信息--><profiles><profile><id>ossrh</id><activation><activeByDefault>true</activeByDefault></activation><distributionManagement><snapshotRepository><!--此id必须与setting.xml的servers=>server=>id中指定的一致--><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><!--发布到staging--><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.8</version><extensions>true</extensions><configuration><serverId>ossrh</serverId><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><!--自动release--><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration></plugin><!--发布源码--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.2.1</version><executions><execution><id>attach-sources</id><phase>package</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>3.1.1</version><configuration><charset>UTF-8</charset><encoding>UTF-8</encoding><docencoding>UTF-8</docencoding><additionalJOption>-Xdoclint:none</additionalJOption></configuration><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><!--gpg加密--><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><!--用于发布:开源协议...--><licenses><license><name>The Apache Software License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0.txt</url></license></licenses><!--用于发布:项目链接--><scm><url>https://github.com/xxx/test-util</url><connection>https://github.com/xxx/test-util.git</connection></scm><!--用于发布:开发者信息--><developers><developer><id>xxx</id><name>xxx</name><email>yyy@163.com</email><url>https://github.com/xxx</url></developer></developers></project>

3.发布

4.查看发布结果

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

进去后,右上角有个登录。用第1步里注册的JIRA账号密码登录即可。

搜索一下自己的jar包,如下图所示:(成功上传到了Snapshots仓库)

大概过四个小时后,可以在中央仓库搜索到。

新地址:https://central.sonatype.com/

老地址:https://search.maven.org/

snapshot发布后,没有邮件通知。 

之后可以在项目中直接引用

<dependency><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>

5.发布release版本

上边是snapshot版本,下边看正式版本的发布。

将版本号0.0.1-SNAPSHOT改为:0.0.1。然后重新点击IDEA的maven clean和maven deploy

发布成功后,会收到JIRA的邮件:

查看发布结果

因为在 maven 插件 nexus-staging-maven-plugin 中 autoReleaseAfterClose 设置为 true 了,所以会自动上传到 staging repository ,并且自动执行了 close=>release=>drop 三步曲(即:自动release)。

在仓库里搜索

大概过四个小时后,可以在中央仓库搜索到。 

新地址:https://central.sonatype.com/

老地址:https://search.maven.org/

再过一两个小时,就可以在阿里仓库和mvnrepository搜到了。

之后可以在项目中直接引用

<dependency><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1</version>
</dependency>

总结

第一次发布时,上边所有步骤都要做。以后再发布时,只操作第6步即可!

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

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

相关文章

【Linux】基本指令(上)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 Xshell快捷键 Linux基本指令 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令/rm指令 结语 Xshell快捷键 AltEnter 全屏/取消全屏 Tab 进…

我用selenium开发了一个自动创建任务,解放重复性工作

我用selenium开发了一个自动创建任务&#xff0c;大大解放了我做重复性工作带来的疲惫感&#xff0c;收获了更多的乐趣。 我司有100多个服务&#xff0c;运维忙不过来的时候&#xff0c;就会让我们自己创建云负载&#xff0c;你首先需要在云服务上创建负载&#xff0c;再创建容…

-1- Python环境安装

1、Python安装 1.1、Windows安装Python 进入python官网&#xff1a;Welcome to Python.org点击 download——>all releases&#xff1b;建议选择3.7.2版本&#xff08;网页链接&#xff1a;Python Release Python 3.7.2 | Python.org&#xff09;&#xff1b;下拉&#xf…

理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage

理想架构的高回退Doherty功率放大器理论与仿真-Multistage 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器&#xff08;等分经典款&#xff09;的理论与ADS电流源仿真参考&#x…

go语言socket编程

1.互联网分层模型 过程分析&#xff1a; 2.Socket图解 Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket后面&#xff0c;对用户来说只需要调用Socket规定的相关函数&a…

【深度学习】SDXL TensorRT Dockerfile Docker容器

文章目录 过程SDXL TensorRT构建SDXL TensorRT LCM 调度器过程 docker push kevinchina/deeplearning:cuda12.1torch2.1.1 FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive# 安装基本软件包 RUN apt-get update && \apt-get u…

备战蓝桥杯---数据结构与STL应用(优先队列的小细节)

很显然&#xff0c;我们先二分求X,对于验证&#xff0c;一开始我先想的是直接求每个的不足电量再除充电量后向上取整&#xff0c;然后判断与k的大小关系。事实上&#xff0c;如果让k很大&#xff0c;若有两只手机在下一刻多没电&#xff0c;显然上述方法得出的结论是错误的&…

氢气泄漏检测仪使用方法:守护安全,从细节开始

随着科技的发展&#xff0c;我们的生活和工作环境中充满了各种潜在的危险。其中&#xff0c;氢气作为一种清洁能源&#xff0c;其使用日益广泛&#xff0c;但同时也带来了泄漏的风险。为了确保我们的安全&#xff0c;了解并正确使用氢气泄漏检测仪至关重要。下面将详细介绍氢气…

机器学习:梯度下降法(Python)

LinearRegression_GD.py import numpy as np import matplotlib.pyplot as pltclass LinearRegression_GradDesc:"""线性回归&#xff0c;梯度下降法求解模型系数1、数据的预处理&#xff1a;是否训练偏置项fit_intercept&#xff08;默认True&#xff09;&…

「连载」边缘计算(十一)01-30:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 函数StartModules()定义具体如下所示。 // StartModules starts modules that are registered func StartModules() { coreContext : context.GetContext(context.MsgCtxTypeChannel) modules : GetModules() for name, module : range modul…

了解 Redis Channel:消息传递机制、发布与订阅,以及打造简易聊天室的实战应用。

文章目录 1. Redis Channel 是什么2. Redis-Cli 中演示使用3. 利用 Channel 打造一个简易的聊天室参考文献 1. Redis Channel 是什么 Redis Channel 是一种消息传递机制&#xff0c;允许发布者向特定频道发布消息&#xff0c;而订阅者则通过订阅频道实时接收消息。 Redis Cha…

Linux命令-ar命令(建立或修改备存文件,或是从备存文件中抽取文件)

补充说明 ar命令 是一个建立或修改备存文件&#xff0c;或是从备存文件中抽取文件的工具&#xff0c;ar可让您集合许多文件&#xff0c;成 为单一的备存文件。在备存文件中&#xff0c;所有成员文件皆保有原来的属性与权限. 语法 ar [-]{dmpqrtx}[abcfilNoPsSuvV] [memberna…

BioTech - 小分子药物生成与从头设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135930139 小分子药物生成是一种利用计算方法自动探索化学空间&#xff0c;寻找具有理想生物活性和药物特性的分子结构的过程。从头设计是一种特殊…

【日常总结】windows11 设置文件默认打开方式

一、场景 二、实战 Stage 1&#xff1a;打开设置 Stage 2&#xff1a;应用 > 默认应用 > 搜索 .txt Stage 3&#xff1a;修改成notepad &#xff0c;设置默认值即可 一、场景 windows 11 .txt 默认记事本打开 需求&#xff1a;如何使用notepad打开呢 &#xff1f;…

隧道穿越:隧道穿透技术介绍

后面会进行一些隧道穿越的实验&#xff0c;因此在本篇中这里先介绍一些有关隧道穿越的技术知识点 隧道和隧道穿透 隧道是一种通过互联网基础设施在网络之间传递数据的方式&#xff0c;设计从数据封装、传输到解包的全过程&#xff0c;使用隧道传递的数据&#xff08;或者负载…

abap_bool 类型

abap_bool 类型 abap_bool 有两种abap_true和abap_false&#xff0c;abap_true代表x&#xff0c;abap_false是空

【Emgu CV教程】6.7、图像平滑之MedianBlur()中值滤波

文章目录 一、介绍1.原理2.函数介绍 二、举例1.原始素材2.代码3.运行结果 一、介绍 1.原理 图像的滤波分为线性滤波和非线性滤波,常见的线性滤波就是前面介绍的均值滤波、方框滤波、高斯滤波。常见的非线性滤波主要包括中值滤波、双边滤波&#xff0c;今天就先介绍中值滤波。…

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域&#xff0c;程序在运行时用来分配内存。它与栈不同&#xff0c;栈用于静态…

【PHP】在ThinkPHP 5.0中设置缓存以提高性能

在ThinkPHP 5.0中&#xff0c;您可以使用Cache类来设置缓存&#xff0c;以提高应用程序的性能。缓存可以减少对数据库的访问次数&#xff0c;从而提高应用程序的响应速度。 首先&#xff0c;确保您已经在config.php文件中启用了缓存。在config.php文件中&#xff0c;将cache配…