发布自己的jar包到Maven中央仓库

本文涉及的产品
.cn 域名,1个 12个月
简介: 发布自己的jar包到Maven中央仓库

Maven仍然是目前使用人数很多的、非常受欢迎的项目构建工具。其方便之处在于:我们只需在配置文件pom.xml中引入依赖和插件,他就可以自动从中央仓库下载、配置并运行程序。不过假设我们自己写了一个jar外部包,想放到Maven中央仓库并使得别人和我们自己使用的时候更加方便,应该怎么做呢?

1,第一次注册账户 - 去Sonatype网站注册账户并申请工单

进入issues.sonatype.org,注册一个账户,然后点击“新建”按钮创建一个工单:

image.png

如下图,项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型选择:New Project

其余必填项如下图:

image.png

图中有*的是必填项,其余留空或者保持默认即可,然后新建工单等待管理员审核。

项目地址可以随便填一个你的项目的Github仓库地址。这里还是强调一下组id的填写,组id需要根据你自己的域名或者开源仓库地址来填。

如果你是用域名,下面给出几个例子:

域名 组id
swsk33.top top.swsk33
swsk33-xxx.top top.swsk33-xxx

开源仓库:

仓库地址 组id
gitee.com/swsk33 com.gitee.swsk33
github.com/swsk33 io.github.swsk33

后面在问题-我的报告中可以追踪issue的情况:

image.png

等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明Gitee或者Github空间是你的,例如我的:

image.png

可以根据其回复的步骤进行。

上述由于我把组id填成了com.github.xxx而他要io.github.xxx,所以他要我需要修改组id(update the Group ID field),如果第一次按照上述要求填对了就不用修改组id,直接按照其回复的步骤进行即可。

意思是让我在我的Github账户中新建一个公开仓库,其空间地址为:https://github.com/swsk33/OSSRH-81835

新建完成后,点击上面Respond按钮开启工单,让管理员去验证。

image.png

等待验证完成,管理员就会接着回复你验证成功,这就说明你的工单通过了,可以上传项目了。

image.png

这个时候可以关闭问题了:

image.png

如果是用域名,则管理员会让你给你的域名添加一个TXT解析,然后他来验证:

image.png

给根域名添加TXT解析即可,内容如上图他说的(with the text后面那个OSSRH-xxx):

image.png

后续步骤和上述是一样的。

2,配置我们的项目

现在我们可以上传项目了。

先进入我们的Maven安装目录,编辑目录里面的conf文件夹里面的settings.xml文件,找到里面的<servers>标签,添加如下内容:

<server>
    <id>ossrh</id>
    <username>你的sonatype用户名</username>
    <password>你的sonatype密码</password>
</server>

这个配置是配置我们上述注册的Sonatype账户用户名和密码,使得我们的项目可以上传上去。

再配置我们要发布的项目的pom.xml如下形式:

<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必须和你申请时的一致 -->
    <groupId>组id</groupId>
    <artifactId>工件id</artifactId>
    <version>版本</version>
    <!-- 其余信息,自己填 -->
    <packaging>jar</packaging>
    <name>项目名</name>
    <description>描述</description>
    <url>项目地址</url>

    <!-- 项目设定 -->
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 许可证信息,这里是Apache 2.0的许可证,大家根据实际情况修改 -->
    <licenses>
        <license>
            <name>The Apache Software License, Version2.0</name>
            <url>https://www.apache.org/licenses/</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <!-- 仓库信息,根据实际情况修改 -->
    <scm>
        <url>项目git仓库地址</url>
        <connection>项目git克隆地址</connection>
        <developerConnection>项目git仓库地址</developerConnection>
    </scm>

    <!-- 开发者信息,根据实际情况修改 -->
    <developers>
        <developer>
            <name>开发者名</name>
            <email>邮箱</email>
            <url>开发者主页</url>
        </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.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.3.0</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>3.5.0</version>
                <configuration>
                    <show>private</show>
                    <nohelp>true</nohelp>
                </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>3.1.0</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

简单的说一下这个配置文件:

  • <groupId> 必须就是我们刚刚工单申请的groupId,包名自己取
  • <version> 是应用版本,注意版本里面不要带有-SNAPSHOT字样,否则上传后可能无法在仓库找到并发布
  • <url>, <name><description> 是项目网址、名称和描述,这三者都是必须要的,缺一不可,否则上传项目是无法通过校验的
  • <licenses>, <developers><scm>这个也是必须的,根据自己的实际情况填写
  • <distributionManagement>中要设置snapshot仓库(<snapshotRepository>)和release仓库(<repository>)地址,如上填写,需要注意的是两个仓库配置中的<id>必须和我们前面设置的settings.xml中的<servers>中的<id>对应一致,否则无法上传
  • <build> 部分是发布项目必要的一些组件,已经在上面的配置文件中配置好了,不用改变了,作用见上面的注释

上面给出的示例,大家可以全部复制作为一个模板去使用,自己进行修改其中的内容。

3,生成秘钥并上传工程

在上传项目时,我们必须先生成秘钥才能上传。

安装git,右键打开git bash输入生成秘钥命令:

gpg --gen-key

然后会提示要你输入姓名和邮箱地址:

image.png

输入完成,会弹出个窗口让你设置这个秘钥的密码并确认:

image.png

自己设定一个密码并牢记,因为后面要用到这个密码的。

然后输入命令查询已经生成的秘钥:

gpg --list-keys

pub字段下面有一个十六进制数,那就是这个秘钥的ID。

image.png

然后我们要把这个秘钥上传至公钥服务器,使用如下命令:

gpg --keyserver keyserver.ubuntu.com --send-keys 秘钥ID

秘钥ID就是我们刚刚gpg --list-keys命令查到的自己的秘钥的ID,复制过去即可。

然后验证是否成功地上传到了服务器:

gpg --keyserver keyserver.ubuntu.com --recv-keys 秘钥ID

如果两条命令执行输出结果都如下说明成功:

image.png

这样,就完成了秘钥的配置了。

接下来,在我们的项目文件夹下打开Git Bash或者其它终端,输入上传项目命令:

mvn clean deploy

执行过程中会弹出一个窗口要求输入秘钥密码,就是输入我们先开始生成秘钥时设置的秘钥密码。

等待上传,最后显示绿色的Build Success说明上传成功。

4,去仓库发布项目到Maven中央仓库

上面的步骤只是把项目传到了Sonatype上了,还没有发布出去。

进入s01.oss.sonatype.org,登录,点击旁边的Staging Repositories即可看到我们发布的项目。

image.png

勾选项目,点击close按钮,开始进行项目校验。

image.png

我这里已经点过了,所以是灰色的。

再点击下面的active标签可以查看close的进度:

image.png

显示All rules passed: Central Sync Requirement就说明校验通过,可以发布了。

再点击上面的release按钮即可发布到中央仓库了。

image.png

完成后,大约过个2个小时,你就可以在central.sonatype.com搜索到你的发布的项目了!

5,以后再发布的时候

以后发布项目,如果groupId不变的话,我们就不需要再去申请工单了。直接重复上述的2、3、4部分中的部分关键步骤即可。

上述settings.xml已经配置了servers,就不用再次配置了,即第2部分配置settings.xml可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第3部分的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml并重新生成并上传秘钥了。

参考文档:

相关文章
|
2月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
15天前
|
Java Linux Maven
Maven 仓库
Maven 仓库
|
9天前
|
Java Linux Maven
|
13天前
|
Java Linux Maven
|
21天前
|
Java Linux Maven
Maven 仓库
Maven 仓库
|
11天前
|
Java Linux Maven
|
17天前
|
Java Linux Maven
|
23天前
|
Java Linux Maven
|
19天前
|
Java Linux Maven
|
25天前
|
Java Linux Maven

热门文章

最新文章

下一篇
无影云桌面