在项目开发过程中,我们常常会使用 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
提交过后呢,过几分钟就会有回复,同时你刚刚注册使用的邮箱也会收到邮件。
注意!
- 这里输入的信息全部使用英文。
- 关于这个 GroupID,不能是你瞎编的域名,如果你正好使用的是自己的域名(反写),可以想我这样填写,如果你没有域名,就得使用 Github 的域名了,格式填写
io.github.用户名
(后续验证会验证域名或 GitHub 账号的所有权)
接下来过了几分钟就会收到回复,我们需要对填写的 GroupID 进行验证。
我上面 GroupID 填写的域名(反写)
world.xuewei
,所以我在这里需要添加一个@
方式的TXT
类型的解析记录,内容为本次提交的 Issue 编号。如果你的 GroupID 的域名的下级,例如world.xuewei.test
那么添加记录的时候可能要添加二级域名的记录,不能使用@
,我猜的,反正都试试。
配置好后,重新点击编辑,然后直接提交即可,然后需要再等几分钟就会收到回复如下:
这种就 OK 了,可以进行后续的操作了。
GPG 环境安装
GPG 的主要作用是生成密钥对,会用于后续我们组件发布的校验。下载地址:https://www.gnupg.org/download/。
找到适合自己设备的安装包后下载即可。
安装完成后运行:
-
新建密钥对
-
选中证书后发布
-
双击证书查看秘钥,然后复制出来,一会要用。
配置 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.org 和 https://mvnrepository.com 便可以搜到自己发布的依赖了!同时也会收到一封邮件通知。
参考链接:
- JAVA 如何上传自己的jar包到Maven中央仓库_本地jar包上传到maven仓库-CSDN博客
- 将项目上传到 Maven 中央仓库(2023最新) - 知乎 (zhihu.com)
- 将jar包发布到maven的中央仓库细节整理 - 陈灬大灬海 - 博客园 (cnblogs.com)