如何上传自己的Jar到Maven中央仓库

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
.cn 域名,1个 12个月
简介: 如何上传自己的Jar到Maven中央仓库

项目开发过程中,我们常常会使用 Maven 从仓库拉取开源的第三方 Jar 包。本文将带领大家将自己写好的代码或开源项目发布到 Maven中央仓库中,让其他人可以直接依赖你的 Jar 包,而不需要先下载你的代码后 install 到本地。

注册帐号

点击以下链接进行账号注册,注册的信息要记住,后面还要用,而且这个密码格式要求比较严格

https://issues.sonatype.org/secure/Signup!default.jspa

Jira 申请

注册登录过后,访问以下链接创建一个 issue,只有申请通过了才能进行后续的上传等操作。

https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

提交过后呢,过几分钟就会有回复,同时你刚刚注册使用的邮箱也会收到邮件。

注意!

  1. 这里输入的信息全部使用英文。
  2. 关于这个 GroupID,不能是你瞎编的域名,如果你正好使用的是自己的域名(反写),可以想我这样填写,如果你没有域名,就得使用 Github 的域名了,格式填写 io.github.用户名(后续验证会验证域名或 GitHub 账号的所有权)

接下来过了几分钟就会收到回复,我们需要对填写的 GroupID 进行验证。

我上面 GroupID 填写的域名(反写)world.xuewei,所以我在这里需要添加一个 @ 方式的 TXT 类型的解析记录,内容为本次提交的 Issue 编号。如果你的 GroupID 的域名的下级,例如 world.xuewei.test 那么添加记录的时候可能要添加二级域名的记录,不能使用 @,我猜的,反正都试试。

配置好后,重新点击编辑,然后直接提交即可,然后需要再等几分钟就会收到回复如下:

这种就 OK 了,可以进行后续的操作了。

GPG 环境安装

GPG 的主要作用是生成密钥对,会用于后续我们组件发布的校验。下载地址:https://www.gnupg.org/download/

找到适合自己设备的安装包后下载即可。

安装完成后运行:

  1. 新建密钥对
  2. 选中证书后发布
  3. 双击证书查看秘钥,然后复制出来,一会要用。

配置 Maven setting

找到本地安装的 Maven 的配置文件(注意这里不是项目里面的 pom.xml),打开编辑。

首先找到 <servers> 标签,在里面添加以下内容:

<server>
    <id>ossrh</id>
    <username>XUEW</username>
    <password>这里是你第一步注册账号的时候的密码</password>
</server>

然后找到 <profiles> 标签,在里面添加以下内容(安装目录改成你的 GPG 目录,一定要到 bin 下的 gpg 这一层):

<profile>
  <id>ossrh</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
    <gpg.executable>D:\Program\GnuPG\bin\gpg</gpg.executable>
    <gpg.passphrase>这里是你刚刚在 GPG 中复制的秘钥</gpg.passphrase>
  </properties>
</profile>

配置项目 Pom

首先注意这里的 GroupID 一定要和前面申请的一样,不然在上传的时候就会报错。这个版本号最好改成数字的形式,就不要加默认的 -SNAPSHOT 了。

首先需要在 Pom 中配置仓库的信息,这个信息也要和申请的一样,不然也会报错,内容如下:

<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>
<!-- 仓库信息 -->
<scm>
    <connection>scm:git@github.com:373675032/xw-fast.git</connection>
    <developerConnection>scm:git@github.com:373675032/xw-fast.git
    </developerConnection>
    <url>https://github.com/373675032/xw-fast</url>
</scm>
<!-- 开发人员信息 -->
<developers>
    <developer>
        <name>XUEW</name>
        <email>isxuewei@qq.com</email>
        <organization>https://github.com/373675032</organization>
        <timezone>+8</timezone>
    </developer>
</developers>

然后添加一些固有的信息,不需要更改:

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

完整的 POM 文件

<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>world.xuewei</groupId>
    <artifactId>xw-fast-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>xw-fast</name>
    <description>
      Xw-Fast 是一个专为 Java Web 开发的针对 Spring 系列框架封装的便捷开发脚手架,旨在降低框架的学习使用成本,提高工作效率,大大提升 Web 开发效率。
    </description>
    <modules>
        <module>xw-fast-core</module>
        <module>xw-fast-web</module>
        <module>xw-fast-crud</module>
        <module>xw-fast-all</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
        <Automatic-Module-Name>world.xuewei.fast</Automatic-Module-Name>
        <!-- versions -->
        <compile.version>8</compile.version>
        <junit.version>5.9.2</junit.version>
        <lombok.version>1.18.26</lombok.version>
        <hutool.version>5.7.17</hutool.version>
        <boot.version>2.7.17</boot.version>
        <fastjson.version>1.2.47</fastjson.version>
    </properties>
    <dependencies>
        <!-- 全局单元测试 -->
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>${boot.version}</version>
        </dependency>
    </dependencies>
    <url>https://github.com/373675032/xw-fast</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>
    <!-- 仓库信息 -->
    <scm>
        <connection>scm:git@github.com:373675032/xw-fast.git</connection>
        <developerConnection>scm:git@github.com:373675032/xw-fast.git
        </developerConnection>
        <url>https://github.com/373675032/xw-fast</url>
    </scm>
    <!-- 开发人员信息 -->
    <developers>
        <developer>
            <name>XUEW</name>
            <email>isxuewei@qq.com</email>
            <organization>https://github.com/373675032</organization>
            <timezone>+8</timezone>
        </developer>
    </developers>
    <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>
</project>

部署上传

先刷新、然后清理,然后部署。

部署的时间有点长,耐心等待,这个步骤就是最关键的了,我由于配置错误重试了很多次,心态都崩了…

验证

使用第一步注册的账号登录系统 https://s01.oss.sonatype.org/

在前面正在部署的过程中可以观察下面这里:

部署完成后可以观察下面这里:

如果你找到了你的 Jar,那么恭喜你,你已经上传成功了!之后再需要等待两三个小时,在 https://search.maven.orghttps://mvnrepository.com 便可以搜到自己发布的依赖了!同时也会收到一封邮件通知。

参考链接:

  1. JAVA 如何上传自己的jar包到Maven中央仓库_本地jar包上传到maven仓库-CSDN博客
  2. 将项目上传到 Maven 中央仓库(2023最新) - 知乎 (zhihu.com)
  3. 将jar包发布到maven的中央仓库细节整理 - 陈灬大灬海 - 博客园 (cnblogs.com)
相关文章
|
10天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件(如JARs):本地仓库在首次执行时创建,默认位于`%USER_HOME%/.m2/repository/`;远程仓库包括中央仓库,存放大量开源Java构件,可在线浏览&lt;http://search.maven.org/&gt;。若本地缺失构件,Maven会从远程下载至本地。可通过settings.xml配置本地仓库路径。
|
1天前
|
存储 Java Linux
Maven 仓库
Maven仓库管理构件,包括JARs、插件等。有3种类型:本地、中央和远程。本地仓库在首次运行时创建,默认位于用户目录下的`.m2/repository`,可自定义。中央仓库是默认的远程仓库,包含大量开源Java构件,由社区维护,可通过http://search.maven.org/搜索。当本地缺少依赖时,Maven会从远程下载并存储到本地。
|
3天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件(JARs等):本地仓库在首次执行时创建,默认在用户目录的`.m2/repository/`;远程仓库用于下载缺失的构件;中央仓库是Maven社区维护的,包含大量Java构件,访问需联网。配置在settings.xml中。浏览中央仓库:http://search.maven.org/#browse。
|
5天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件,如JARs,分为本地、中央和远程。本地仓库在首次运行时创建,默认位于用户目录下的`.m2/repository`。当Maven需要构件时,它首先查找本地,若缺失则从远程仓库(如中央仓库)下载。中央仓库包含大量开源Java构件,由Maven社区维护,可通过http://search.maven.org/#browse搜索。
|
6天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件,包括本地、中央和远程仓库。本地仓库在首次运行时创建,默认位于用户目录下的`.m2/repository`。若需更改,可在settings.xml中设置。中央仓库是Maven社区维护的,包含大量开源Java库,无需配置即可通过网络访问。[http://search.maven.org/#browse]用于浏览其内容。当本地仓库缺失依赖时,Maven会从远程仓库(如中央仓库)下载。
|
12天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件,包括依赖和插件。有本地、中央和远程三种类型。本地仓库在首次运行时创建,默认在用户目录的`.m2/repository`。Maven首先查找本地仓库,若无则从远程仓库(如中央仓库)下载。中央仓库包含大量开源Java构件,可在线浏览于http://search.maven.org/。
|
21天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理依赖,包括本地、中央和远程仓库。本地仓库在首次运行时创建,默认位于用户目录的`.m2/repository`。若本地缺少构件,Maven会从远程仓库下载,中央仓库是默认的远程源,包含大量开源Java构件。中央仓库无需配置,可通过HTTP访问,[search.maven.org](http://search.maven.org/#browse)可浏览其内容。
|
24天前
|
Java Maven
maven常用仓库
maven常用仓库
102 2
|
24天前
|
存储 Java Maven
win自定义配置本地maven仓库位置,修改maven仓库位置
win自定义配置本地maven仓库位置,修改maven仓库位置
25 0
win自定义配置本地maven仓库位置,修改maven仓库位置
|
21天前
|
Java Linux Maven
Maven 仓库
Maven仓库管理构件,如JARs,分为本地、中央和远程。本地仓库在首次运行时于用户目录的`.m2/repository`创建,默认位置可修改`settings.xml`。中央仓库是社区维护的,包含大量开源Java构件,可通过http://search.maven.org搜索。当本地缺失依赖时,Maven会从远程仓库下载到本地。

推荐镜像

更多