发布jar包到maven中央仓库

1. 环境

在网上找的很多文章中写得都有很多问题,这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。

  • 系统:mac(windows系统在下载辅助工具时不太一样,在配置上和mac系统没有区别)

  • IDE:IntelliJ IDEA

  • JDK:1.8

  • maven:3.8.1(IDEA自带的版本)

  • 代码:上传到github上(使用gitee也行)

  • 发布形式:以jar包发布release版本(非SNAPSHOT版本)

2. 项目配置

官方对发布的项目做了一些必需的要求,如果不按要求来,发布可能会报错。

2.1. javadoc和source

以非pom方式打包的项目(pom.xml配置文件中可以通过标签配置打包方式,默认就是jar),在打包完成后,target目录下必须要包含***-sources.jar***-javadoc.jar。如下图:

为了达成以上效果,需要在pom.xml中依赖两个插件:

复制代码
<build>
    <plugins>
        <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-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

参考:++Requirements - The Central Repository Documentation++

2.2. 使用 GPG/PGP 签署文件

打包完成后,target目录下必须要包含***.jar.sac。如下图:

为了达成以上效果,需要在pom.xml中依赖插件(加完插件不要急着构建,还要下载GPG生成密钥,后面会说):

复制代码
<build>
    <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>
</build>

参考:++Requirements - The Central Repository Documentation++

2.3. 项目名称和版本配置

  • groupId :使用正确的反向域名。如果有私人域名,可以配置成私人域名(后面配置起来比较麻烦)。如果没有私人域名,可以直接使用github的域名:io.github.{account}(gitee同理,推荐使用这种方式, account是github注册的登录账号)。

  • artifactId:项目名称,可以随意发挥。

  • version :版本,可以使用1.1.1这种格式,不推荐带-SNAPSHOT,快照版本不会直接发布到中央仓库。

参考:++Requirements - The Central Repository Documentation++

2.4. 项目名称、描述和 URL

这个是为了增加可读性。

  • name :推荐使用这种格式:<name>${project.groupId}:${project.artifactId}</name>,当然也可以自定义。

  • description:项目描述,自己发挥。

  • url:项目地址,直接使用github(或gitee)上项目的地址即可。

参考:++Requirements - The Central Repository Documentation++

2.5. 许可证书

可以使用Apache/MIT的许可证书,直接拷贝下面的即可:

复制代码
<licenses>
        <license>
        <name>The Apache Software License, Version 2.0</name>
        <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
</licenses>

参考:++Requirements - The Central Repository Documentation++

2.6. 开发人员信息

留你自己的艺名和邮箱:

复制代码
<developers>
        <developer>
        <name>你的艺名</name>
        <email>你的邮箱</email>
    </developer>
</developers>

参考:++Requirements - The Central Repository Documentation++

2.7. SCM 源码管理系统信息

可以使用github(或gitee)的项目地址。

复制代码
<scm>
    <connection>scm:git:git://github.com:maidoubaobao/easy-tool.git</connection>
    <developerConnection>scm:git:ssh://github.com:maidoubaobao/easy-tool.git</developerConnection>
    <url>https://github.com/maidoubaobao/easy-tool/tree/master</url>
</scm>

参考:++Requirements - The Central Repository Documentation++

2.8. 文件签名校验(非必需)

官网说必需要包含.md5.sha1签名校验文件,但我没有特地去配置这个,也是可以发布的。可以跳过这一步。

参考:++Requirements - The Central Repository Documentation++

3. 在 JIRA 上提发布申请

3.1. 注册 JIRA

点击如下链接注册账号并登录,如果有账号直接登录即可:++Sign up for Jira - Sonatype JIRA++

参考:++OSSRH Guide - The Central Repository Documentation++

3.2. 创建项目

点击新建,按照下面的图示来填写:

  • groupId :要和项目里对应上,必须是一个可用的域名的反转字符串,如果项目是放在github上,必须使用io.github.{account}的格式,否则会审核不通过(注意:不能使用com.github)。

  • Project URL/SCM url:直接使用github的项目地址即可。

3.3. 查看刚刚创建的项目

正常情况下创建好默认就会进入刚刚创建的项目,如果进不去,可以按照路径项目-查看所有项目-类别-Central即可看到项目链接,点进去后,切换筛选器我的报告就能看到创建的项目了。

3.4. 在github中创建一个空项目

创建好的项目,会分配一个唯一标识OSSRH-***(见上图),需要用这个标识去github上创建一个空项目,这个是为了向核审管理员证明需要发布的github项目确实是你自己的项目。

3.5. 等待管理员审核

管理员都在国外,因为时差,一般隔天才会核审通过。没办法,耐心等着吧。审核通过后,会发邮件(邮箱就是注册JIRA的那个),也会在JIRA项目下出现活动日志。

4. 获取 GPG 密钥

在等待JIRA项目审核的同时,可以并行把GPG密钥搞定。注意:mac系统和windows系统在获取GPG密钥时有些区别,mac全程都是通过命令行搞定的,而windows提供了操作界面,可能会方便一点。这里只介绍mac系统的配置方式,windows系统可以自行搜配置教程。

4.1. 安装 GnuPG

  • 用下面的链接下载 GnuPG,选择系统对应的版本。

++https://gnupg.org/download/index.html#sec-1-2++

  • 验证安装是否成功

使用gpg --version命令来验证,如果输出了版本则说明安装成功。

参考:++Working with PGP Signatures - The Central Repository Documentation++

4.2. 生成密钥对

使用命令gpg --full-generate-key生成密钥对,2年内有效。执行命令后,需要输入姓名和邮箱(建议和注册JIRA时用的一致),然后输入o(注意是字母o)确认生成。随后会提示输入一个passphrase口令来保护你的密钥对,这个口令要记住,后面配置需要使用。注意:这个命令不建议执行多次,不然生成了多个密钥对,发布时还要去配置使用哪个密钥对,比较麻烦。

参考:++Working with PGP Signatures - The Central Repository Documentation++

4.3. 发布公钥

  • 使用命令gpg --keyserver pgp.mit.edu --send-keys 公钥来发布。

官网提供了3个地址,有的地址可能不能用,上面这个地址亲测有效。(所以官方也不一定靠谱)

  • 使用命令gpg --keyserver pgp.mit.edu --recv-keys 公钥验证是否发布成功。

注意:验证的命令要等一会执行才能响应数据,估计发布可能有点延时,可以多执行几次。反正如果响应如图所示,就代表发布成功了。

参考:++Working with PGP Signatures - The Central Repository Documentation++

5. JIRA 项目核审通过后的配置

5.1. 仓库地址

核审通过后,在JIRA上的项目里可以看到日志,这代表项目已经拥有发布权限了。下图标记出来的就是仓库地址。

5.2. 修改 maven 配置

这里修改的是mavensetting.xml配置文件,如果不知道配置文件在哪里(那么你不是一个合格的程序猿),可以在IntelliJ IDEAsettings > Build,Execution,Deployment > Builds Tools > Maven页面找到User settings file

  • 配置JIRA账户用于发布

  • 这里的<server>-<id>是有用的,一会要在项目的pom文件配置中要对应上。

    <servers> <server> <id>ossrh</id> <username>JIRA用户名</username> <password>JIRA登录密码</password> </server> </servers>
  • 配置GPG用于文件签署校验

  • 前文2.2小节已经在项目中配置了GPG插件了,这里要配置GPG的口令才能进行正常的签署。

  • 前文4.2小节生成GPG密钥对的时候,输入过一个口令passphrase,就用那个。

    <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>GPG口令</gpg.passphrase> </properties> </profile> </profiles>

5.3. 配置仓库地址和插件

这里是在项目的pom文件中配置。

  • 配置发布的仓库地址

  • 这里的仓库域名,可以从JIRA项目的日志里看到,核审通过后会给你一个地址,就用那个做为域名。按照下面的格式来配:

    <build> <plugins> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> </plugins> </build>

6. 发布

JIRA 核审通过后,就可以发布了

6.1. 发布到中央仓库

  • 可以直接在IntelliJ IDEA中点击deploy来发布:
  • 输出如下结果说明发布成功了:

6.2. 验证发布结果

发布成功以后,并不能立刻在maven中央仓库中搜索到,大概隔一天以后才能搜索得到,所以不要心急,耐心等待。

  • JIRA 上的回应

执行完发布动作以后,大概隔了几分钟以后,JIRA项目下会多出一条日志:

这条日志给出了两个地址和两个时间,反正差不多要等个那么长的时间才能搜得到。我已经发布到中央仓库里了,第一个地址里还是找不到,但是第二个地址里能搜到:

下面这个地址好像是执行完发布操作后,过一会就能搜得到,可以试试:++Index of /groups/public++

  • 在中央仓库里搜索

一般是隔天,才能在中央仓库里搜得到,在阿里云的仓库里也可以搜得到,阿里云本来就是从中央仓库同步的。

建议使用groupId来搜,一搜一个准。用artifactId来搜在第一页可能找不到,因为maven会对搜索结果做排序。

7. 彩蛋

  • JAVA_HOME 报错

如果遇到这样的报错The environment variable JAVA_HOME is not correctly set,不要慌,一般是因为你本地环境变量没有设置JAVA_HOME或者设置成了jre的目录。如果是因为前者可以去设置一下JAVA_HOME,如果是因为后者,可以把JAVA_HOME的目录改成jdk/bin的目录,或者可以改一下项目的pom配置文件:

复制代码
<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>
            <configuration>
                <!-- 这里需要指定jdk的bin目录下的javadoc执行文件 -->
                <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
            </configuration>
        </execution>
    </executions>
</plugin>

文章转载自:++是秃子迟早会发光的++

原文链接:https://www.cnblogs.com/wind-wound/p/17893935.html

相关推荐
juniperhan2 分钟前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054733 分钟前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路23 分钟前
C++23概述
java·c++·c++23
专注API从业者1 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠2 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY2 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克33 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠3 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌3 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化