✨ 我是 Muzi 的「文章捕手」,擅长在文字的星海中打捞精华。每当新的篇章诞生,我就会像整理贝壳一样,将思想的闪光点串成珍珠项链~

本文详细介绍了在2024年Maven中央仓库大改版后,如何将自己的Jar包发布到Maven中央仓库的完整流程。内容涵盖账号注册、命名空间创建与验证(支持GitHub、GitLab、Gitee等多平台命名规范及自定义域名验证)、生成用于上传的随机账号密码、GPG密钥下载与配置、以及POM文件的规范编辑。文章重点说明了必须严格按照规范配置POM文件和GPG插件,确保上传过程顺利。最后,介绍了使用Maven命令打包上传、发布及搜索Jar包的步骤,并附带注意事项和参考资料,具备较强的实用指导价值。

2025-01-26🌱上海: ⛅️ 🌡️+9°C 🌬️↓17km/h

# 账号准备

# 一、注册账号

Maven Central
image.png
点击右上角登录,没有账号就注册,或者使用谷歌/GitHub账号登录,我这里已经登录了
image.png

# 二、新建命名空间

先点击右上角的Publish,然后新增命名空间,我这里之前已经添加过了
image.png
点击新增之后,弹出输入框
image.png
输入框填写内容根据你的仓库地址决定,如下

  1. GitHub :io.github.自己用户名
  2. GitLab :io.gitlab.自己用户名
  3. Gitee :io.gitee.自己用户名
  4. Bitbucket: io.bitbucket.自己用户名
  5. 以上都是io开头的,除非有自己的域名,可以自定义。

具体自定义域名命名空间如下
image.png

# 三、验证命名空间

添加以上内容后,接下来就是验证命名空间了,但是要注意的一点是,如果你使用的是github的命名,那么你就需要去github创建一个开源的仓库,仓库名称就是verify namespace中的名称(随机字符串),我这里使用的是个人域名创建的命名空间,就需要去dns进行txt解析进行验证,如下图
image.png
我这里使用的是阿里云的dns解析服务
image.png
然后解析完成后,就是等待验证
image.png

# 四、创建push的账号和密码

这一步抛弃了原来固定的 username 和 password,选择了一个随机的 username 和 password,这个 username 和 password 用来 push 你的 jar 包到中央仓库里面去,所以一定要保存好,以后都不会显示了,只有在创建成功的时候才会显示一次。如果实在没记住,可以重新生成一个
点击右上角的view account
image.png
点击OK
image.png
最终会生成一个这样的数据,要保存好
image.png
设置setting
把他粘贴到 maven 的 setting.xml 文件里面,这个server是自定义的 id,待会在pom中会用到。

# GPG准备

# 一、下载 GPG

GPG 用于创建 asc 文件用于验证你的文件的正确性和安全性,我们直接去官网下载:(自己选择对应操作系统)

https://gnupg.org/download/index.html

image.png

# 二、安装完成,生成密钥

image.png
记住姓名,待会pom中需要配置

# 发布jar包

# 一、编辑pom文件

<?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.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<!--   这里必须是你认证过的命名空间 -->
    <groupId>cn.easymuzi.plugin</groupId>
    <artifactId>multilevel-cache-spring-boot-starter</artifactId>
    <version>1.0.0</version>
    <name>multilevel-cache-spring-boot-starter</name>
    <description>multilevel-cache-spring-boot-starter</description>
	<properties>  
	    <java.version>1.8</java.version>  
	    <mica.version>2.3.1</mica.version>  
	    <spring.checkstyle.plugin>0.0.29</spring.checkstyle.plugin>  
	</properties>  
	  
	<dependencies>  
	    <dependency>  
	        <groupId>org.springframework.boot</groupId>  
	        <artifactId>spring-boot-starter-data-redis</artifactId>  
	    </dependency>  
	  
	    <dependency>  
	        <groupId>com.github.ben-manes.caffeine</groupId>  
	        <artifactId>caffeine</artifactId>  
	    </dependency>  
	  
	    <dependency>  
	        <groupId>org.springframework.boot</groupId>  
	        <artifactId>spring-boot-actuator</artifactId>  
	        <optional>true</optional>  
	    </dependency>  
	  
	    <dependency>  
	        <groupId>io.micrometer</groupId>  
	        <artifactId>micrometer-core</artifactId>  
	        <optional>true</optional>  
	    </dependency>  
	  
	    <dependency>  
	        <groupId>org.projectlombok</groupId>  
	        <artifactId>lombok</artifactId>  
	        <optional>true</optional>  
	    </dependency>  
		  
	    <dependency>  
	        <groupId>net.dreamlu</groupId>  
	        <artifactId>mica-auto</artifactId>  
	        <version>${mica.version}</version>  
	        <scope>provided</scope>  
	    </dependency>  
	</dependencies>

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

    <developers>
        <developer>
            <name>muzi</name>
            <email>mz@easymuzi.cn</email>
            <roles>
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
        </developer>
    </developers>

	<scm>  
	    <tag>master</tag>  
	    <connection>https://github/MuziGeek/multilevel-cache</connection>  
	    <developerConnection>https://easymuzi.cn</developerConnection>  
	    <url>https://github/MuziGeek/multilevel-cache</url>  
	</scm>
    
	    <build>  
	    <plugins>  
	        <plugin>  
	            <groupId>org.sonatype.central</groupId>  
	            <artifactId>central-publishing-maven-plugin</artifactId>  
	            <version>0.4.0</version>  
	            <extensions>true</extensions>  
	            <configuration>  
	                <!-- 必须对应setting.xml中的id-->  
	                <publishingServerId>muzi</publishingServerId>  
	                <tokenAuth>true</tokenAuth>  
	            </configuration>  
	        </plugin>  
	        <!--   source源码插件 -->  
	        <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>  
	        <!--   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>  
	        <plugin>  
	            <groupId>org.apache.maven.plugins</groupId>  
	            <artifactId>maven-gpg-plugin</artifactId>  
	            <version>1.5</version>  
	            <configuration>  
	                <!--                 GPG生成密钥的姓名   -->  
	                <keyname>Muzi</keyname>  
	            </configuration>  
	            <executions>  
	                <execution>  
	                    <id>sign-artifacts</id>  
	                    <phase>verify</phase>  
	                    <goals>  
	                        <goal>sign</goal>  
	                    </goals>  
	                </execution>  
	            </executions>  
	        </plugin>  
	    </plugins>  
	</build>
</project>

除了dependencies里面的内容是根据你的项目里面的实际情况写,其他的都必须写,否则会上传失败。

# 二、打包上传

按照下面的步骤进行

  1. 终端输入 mvn clean deploy
  2. 提示输入GPG的密码,进行输入
    image.png
  3. 发布成功 还能看到发布idDeployment 37926a30-d716-46df-a948-a64036375d6b (需要注意每次版本号不可以重复)
    image.png

# 三、 发布jar包

点击publish发布
image.png
发布后才可以被别人搜索到。

# 四、搜索jar包

发布完后,等待几分钟后进行搜索
image.png

发布的有点慢,我就不演示搜索结果了

# 注意事项

  • publishingServerId 里面的值要对应 setting 文件里面的 id
  • maven-gpg-plugin 插件中的keyname必须要和刚刚GPG生成的姓名一致
  • 之前有 gpg 秘钥的时候请先导出,如何把原来的删除,否则会一直验证失败
  • 使用 mvn clean deploy 命令的时候请指定 setting 文件地址,如果在 idea 打包则不需要
  • Generate User Token 如果重新生成,之前的就会用不了,会报 401 错误
  • 一定要用我发出来的 pom 文件里面的结构,否则会打包失败

# 参考

Maven 2024年3月大改版后,我该如何把自己的jar包发布到中央仓库?_jar包发布到maven仓库-CSDN博客
使用gpg插件发布jar包到Maven中央仓库 完整实践-CSDN博客
一个初学者对mica-auto的理解-CSDN博客

更新于

请我喝[茶]~( ̄▽ ̄)~*

Muzi 微信支付

微信支付

Muzi 支付宝

支付宝