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

准备工作

github账号

需要在github上创建项目并上传项目代码

sonatype账号

maven中央仓库的代码通过Sonatype来管理OSSRH仓库,所以需要提前注册好, 点击注册

配置GPG

发布到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。因此,我们需要在本地安装并配置GPG。本人开发机操作系统是manjaro,自带gpg命令行软件,其他操作系统gpg安装方式请自行搜索。 使用命令 gpg2 –generate-key 生成一个新的key,期间会要求输入姓名、邮箱和密码 img.png 使用命令 gpg2 –send-keys [用户标识] 发送公钥到公共服务器 img.png

项目发布

项目发布申请

在Sonatype菜单栏选择新建img.png

弹出的对话框里项目选择 Community Support - Open Source Project Repository Hosting (OSSRH),问题类型选New Project img.png

Group Id 填写 io.github.username,project url则是你github项目链接,SCM url则是你项目git clone的那个地址 img.png 创建完成后会收到电子邮件,要求你验证group id,按邮件要求在github上创建一个新的空项目 img.png 完成邮件要求后记得将工单状态从waiting for response修改为open,审核通过后会收到邮件告知你环境已经准备好了,你可发布项目到中央仓库了 img.png

设置maven

Sonatype最后发的邮件里面有 说明文档 链接

按照文档说明,首先在maven的setting.xml配置文件里面添加一个server

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>your-jira-id</username>
      <password>your-jira-pwd</password>
    </server>
  </servers>
</settings>

接着加入下面的配置,该配置也可以放到pom文件里,但pom文件上传到公共仓库后是公开的,有安全问题,所以建议放到setting.xml里

<properties>
  <gpg.executable>gpg2</gpg.executable>
  <gpg.passphrase>the_pass_phrase</gpg.passphrase>
  <gpg.keyname>0x2E150E61</gpg.keyname>
</properties>

gpg.keyname的值可以通过命令 gpg2 –list-signatures –keyid-format 0xshort找到,这个命令输出结果类似下面

pub   rsa3072/0x2E150E61 2023-06-13 [SC] [有效至:2025-06-12]
      38E6D894A2B9A7DFD486EAB4A6D418F72E150E61
uid             [ 绝对 ] wenkiam <zwjatjx@gmail.com>
sig 3        0x2E150E61 2023-06-13  wenkiam <zwjatjx@gmail.com>
sub   rsa3072/0xC7B92C92 2023-06-13 [E] [有效至:2025-06-12]
sig          0x2E150E61 2023-06-13  wenkiam <zwjatjx@gmail.com>

其中 sig 3 那行的0x2E150E61就是我们需要的gpg.keyname

配置项目pom.xml文件,填写项目信息、开源许可协议,SCM信息,开发者信息等,这些信息都是必填的,否则无法通过校验

<project>
  <name>starcloud-vertx-spring</name>
  <description>use vertx with spring</description>
  <url>https://github.com/Wenkiam/starcloud-vertx-spring</url>
  <licenses>
    <license>
      <name>BSD 3-Clause</name>
      <url>https://spdx.org/licenses/BSD-3-Clause.html</url>
    </license>
  </licenses>
  <scm>
    <connection>https://github.com/wenkiam/starcloud-vertx-spring.git</connection>
    <url>https://github.com/wenkiam/starcloud-vertx-spring</url>
  </scm>
  <developers>
    <developer>
      <name>your_name</name>
      <email>your_email</email>
      <roles>
        <role>Developer</role>
      </roles>
      <timezone>+8</timezone>
    </developer>
  </developers>
</project>

配置插件

<build>
  <plugins>
    <!-- 此插件用于生成源码jar包-->
    <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>
    <!-- 此插件用于生成javadoc-->
    <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>
    <!-- 此插件用于gpg签名-->
    <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>
          <configuration>
            <keyname>${gpg.keyname}</keyname>
          </configuration>
        </execution>
      </executions>
    </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>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
      </configuration>
    </plugin>
  </plugins>
</build>

配置远程仓库地址,id对应settings.xml里面的server id

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

使用maven发布

完成上述配置,则可通过deploy命令进行打包上传,将jar包发布到Sonatype OSSRH仓库。

mvn clean deploy