将项目上传到Maven中央仓库(2023最新版)
作者:co松柏 发布时间:2022-11-24 18:25:12
官方文档:https://central.sonatype.org/publish/publish-maven/#a-complete-example-pom
整体流程
注册 Jira Software
新建问题
完成域名所有权的验证
配置 gpg 密钥
配置 setting.xml
配置 pom.xml
上传
具体操作
注册 Jira Software :https://issues.sonatype.org/secure/Signup!default.jspa
新建申请
前两个默认值没有必要改动
Group Id 填域名或 io.github.用户名(后续验证会验证域名或 GitHub 账号的所有权)
Project URL 和 SCM url 按照实例填
Username(s) 指能够向这个 Group Id 发包的 jira 用户
查看新建的申请并等待审核(一般5-10分钟)
然后官方的机器人会给一个评论让我们完成验证
根据评论的提示,如果我们的 Group Id 是域名,则需要给域名添加一条解析记录;如果是 GitHub 的话,则需要创建一个新的仓库来完成验证;做完之后将问题调整为开放状态等待审核(因为我这里是已经完成了,所以是已解决状态)
审核成功之后会有如下评论
下载 GPG 工具,在命令行执行 gpg --gen-key** **命令,按照指示生成密钥对。gpg --list-keys 命令可以查看已生成的密钥对。通过 gpg --keyserver keyserver.ubuntu.com --send-keys 公钥 命令将密钥对发到服务器,供后面验证使用
配置 Maven 的 setting.xml 文件。在 servers 里添加一个 server 块,内容如下:
<server>
<id>ossrh</id>
<username>jira 账号</username>
<password>jira 密码</password>
</server>
配置项目的 pom.xml 文件,这里主要是添加了一些插件,测试通过的示例 pom 文件如下。注意:包的 GAV 坐标里的 groupId 一定要跟上面在 jira 申请问题时填写的 Group Id 保持一致,否则无法上传成功
<?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.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 包信息根据实际填写,groupId 一定要跟上面在 jira 申请问题时填写的 Group Id 保持一致,否则无法上传成功 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<name>...</name>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<dependencies>
...
</dependencies>
<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>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<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>
<stagingProgressTimeoutMinutes>20</stagingProgressTimeoutMinutes>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<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>
<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-javadoc-plugin</artifactId>
<configuration>
<additionalOptions>
<additionalOption>-Xdoclint:none</additionalOption>
</additionalOptions>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 后面是开发者及项目信息,根据实际填写 -->
<licenses>
<license>
<name>BSD 3-Clause</name>
<url>https://spdx.org/licenses/BSD-3-Clause.html</url>
</license>
</licenses>
<scm>
<connection>...</connection>
<url>...</url>
</scm>
<developers>
<developer>
<name>...</name>
<email>...</email>
<roles>
<role>Developer</role>
</roles>
<timezone>+8</timezone>
</developer>
</developers>
</project>
上传包
构建成功之后可以先查一下是否发布成功(用 jira 账号登录):https://s01.oss.sonatype.org/#welcome
成功之后在 jira 创建的问题里会有评论(会有一定延迟),如下图:
到这里就完成了,接下来等着其他各大仓库自动同步(网上说4h,但我实际测试用了接近7h)就可以了。Maven 中央仓库首先可以查到(这个很快,半小时内就可以查到了),然后是我们熟知的mvnrepository.com/和其他仓库
来源:https://juejin.cn/post/7232115066480771132


猜你喜欢
- 跑马灯被运用在很多领域, 例如商场的电子条幅、大楼的宣传广告位、地铁的广告位.不过毫无疑问的是它们都是为了解决文字过长的问题而应景给出的一种
- 今天学习了Map集合的几种方法,尤其是遍历Map集合感觉尤为重要,所以发出来供大家学习和自己复习以用。众所周知Map集合里存储元素是以键值对
- 前言本文是我之前写的这篇文章《Android图文混排-实现EditText图文混合插入上传》的升级版,除了在EditText实现了图片上传之
- 前言在JDK当中给我们提供的各种并发工具当中,比如ReentrantLock等等工具的内部实现,经常会使用到一个工具,这个工具就是LockS
- SpringBoot停止启动时测试检查rabbitmq问题在Springboot项目中配置rabbitmq后,总是在每次启动时自动测试MQ的
- 本文调用android的媒体播放器实现一些音乐播放操作项目布局:<LinearLayout xmlns:android="h
- 背景我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲
- 1、IDEA右键没有创建新的package选项2、在Idea中创建XML文件,发现"URI is not registered&q
- 今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上。之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需
- 一、去掉标题栏的方法第一种:入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE_
- 矢量室内地图开发因为公司项目的需要,需要开发一套室内地图,并实现路线的规划功能。因为之前没做过这方面的开发,相关的资料也比较少,所以只能一个
- 概述早期的 Android 系统不完善,导致 App 侧有很多空子可以钻,因此它们有着有着各种各样的姿势进行保活。譬如说在 Android
- 引言:上一专题介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一
- 环境搭建项目结构图:1.我们首先做好服务端pom.xml<dependencies>
- 算法分析一个排序算法的好坏,一般是通过下面几个关键信息来分析的,下面先介绍一下这几个关键信息,然后再将常见的排序算法的这些关键信息统计出来。
- 使用Zenject和UniRx的入门级技术实现了伪登录注册功能。运行效果登录面板using System;using UniRx;using
- 本篇文章主要来讲解怎样绘制游戏触摸轨迹的曲线图。 &nb
- 本文介绍在使用C#开发WinForm窗体程序时,如何设置窗体的大小不能被改变。我们在开发一个窗体(WinForm)程序时,所有的控件都部署在
- 本文实例讲述了Android编程实现AlertDialog自定义弹出对话框的方法。分享给大家供大家参考,具体如下:弹出对话框,显示自定义的布
- 1.为什么需要动态内存分配关于这个问题,我们先看看我们之前是如何开辟内存的。int val = 20;//在栈空间上开辟四个字节char a