手把手教你发布自己的jar包到maven中央仓库

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 手把手教你发布自己的jar包到maven中央仓库

背景

兄弟们,最近在搞一个Tile38空间数据库的相关的项目,为了在java端更好地使用Tile38空间数据库,我自己干了两周用java语言撸了一个jtile38客户端(ps:主要是目前没有一个完整好用的Tile38客户端),今天正式发布1.0.0版本。

为了能够更好地让这个小工具服务于更多的开发人员,我花了点时间把它上传到maven中央仓库了,大家有需要的可以自取。

下面讲解一下如何把自己的jar包发布到maven中央仓库。

注册Sonatype账号

注意:这一步只需要做一次,以后发布别的jar包都不需要,除非更换groupId

注册地址:issues.sonatype.org/secure/Sign…

注册完毕后,需要提交工单由工作人员审核


1cb22c9cdb0c4211b74c6a5b7457c089_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

730de71e6cc64500898ca95e08185ba9_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

按照以上两步完成后,就可以等待工作人员审批了。

【注意】项目要提前上传到【Project URL】上面,因为工作人员会去检查。

如果是个人域名或公司域名的项目,那么需要验证你对指定域名的所有权;比如group idcn.baidu.xxx,那么在工单的后续回复中会需要你去该域名对应的服务器上添加一条指定的TXT解析;

GPG签名

注意:这一步也只要做一次,除非你的GPG签名过期了,或者被你删掉了,要么就是你换电脑了

兄弟们,废话不多说,直接上链接:www.gnupg.org/download/

咱们先下载一个gpg签名工具,大家根据自己的操作系统来;安装完毕后,直接在控制台输入命令:

gpg --generate-key
复制代码

后续就根据自己情况输入,最后回车会生成公钥和私钥,我们接下来需要把生成的公钥上传到公共服务器供 sonatype 验证。

可以通过以下命令把公钥发送给公共服务器:

gpg --keyserver pgp.mit.edu --send-keys [公钥]
复制代码

gpg --keyserver keyserver.ubuntu.com --send-keys [公钥]
复制代码

gpg --keyserver keys.openpgp.org --send-keys [公钥]
复制代码

以上分别为向三个公共服务器发生公钥,只要其中一个成功即可。

settings.xml配置

接下来,我们需要在~/.m2/settings.xml文件中添加以下配置:

<profiles>
    <profile>
      <id>oss</id>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>签名密码</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
<servers>
    <server>
      <id>oss</id>
      <username>ossrh注册的账号</username>
      <password>ossrh注册的密码</password>
    </server>
</servers>
复制代码

pom.xml配置

这一步开始,每次发布相同group id的jar包都需要操作一遍。

settings.xml文件修改完毕,接下来我们还需要在项目中的pom.xml文件中也添加一些配置。

<groupId>com.github.zw201913</groupId>
    <artifactId>jtile38</artifactId>
    <version>1.0.0</version>
    <name>jtile38</name>
    <description>java client for tile38</description>
    <url>https://github.com/zw201913/jtile38</url>
<!--   license信息         -->
    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
<!--   开发人员信息         -->
    <developers>
        <developer>
            <name>姓名</name>
            <email>邮箱</email>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>+8</timezone>
        </developer>
    </developers>
<!--   项目仓库信息         -->
    <scm>
        <connection>scm:git:https://github.com/zw201913/jtile38.git</connection>
       <developerConnection>scm:git:https://github.com/zw201913/jtile38.git</developerConnection>
        <url>https://github.com/zw201913/jtile38</url>
        <tag>v${project.version}</tag>
    </scm>
<!--   指定打包上传的目标url         -->
    <distributionManagement>
        <snapshotRepository>
            <!--   这个id需要和settings.xml里面的id一致         -->
            <id>oss</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
          <!--   这个id需要和settings.xml里面的id一致         -->
            <id>oss</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
<!-- 编译工具 -->
    <build>
        <plugins>
            <!-- Source -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <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.10.4</version>
                <configuration>
                    <additionalJOptions>
                        <additionalJOption>-Xdoclint:none</additionalJOption>
                    </additionalJOptions>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- GPG -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.6</version>
                <configuration>
                    <gpgArguments>
                        <arg>--pinentry-mode</arg>
                        <arg>loopback</arg>
                    </gpgArguments>
                </configuration>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
复制代码

打包发布

注意:每次发布相同group id的jar包都需要操作的步骤。

在所有的配置都编写完毕后,我们需要在项目路径下开启终端执行以下命令:

mvn clean deploy
复制代码

该命令执行成功后,我们的jar包就上传到Staging Repositories(oss.sonatype.org/#);如果该命令执行失败,想要查看是什么原因导致失败的,可以使用mvn clean deploy +X查看打包发布的详细过程,并显示报错信息;

命令执行完毕后,我们需要登陆oss.sonatype.org/ 上面查看我们上传到Staging Repositories中的jar包:


cd47b802919744bba3a79986db530221_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

  • Close目标jar包

f63b55be9dce4cc2a15842485f448113_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

点击Close需要填写描述信息,这个自己根据情况写

  • 查看进度

咱们刚刚的Close操作,会触发一个工作流来校验上传的jar包,咱们也可以看看校验的进度,时间一般就一两分钟:


54d4a75b02174cc08bd4afb328280267_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

  • 正式发布jar包

12c55436b1094135a89188ada834d6e6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

至此,打包发布的全部流程就完毕了。想要在maven中央仓库中搜索到刚刚发布的jar包还需要30分钟到4个小时不等。


相关文章
|
5月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
5月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
5月前
|
敏捷开发 Java 持续交付
阿里云云效产品使用合集之maven仓库是否可以代替自建的Nexus
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
151 3
|
3月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
743 3
|
5月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
5月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
5月前
|
敏捷开发 JavaScript Java
阿里云云效产品使用合集之如何进行Maven私有仓库迁移
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
Java Maven Windows
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
66 0
|
5月前
|
Java Maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
54 0