开发一个Java库并发布到中央仓库

前言

如果我们开发一个 Java 的开源库,要让其他人可以轻松下载到,那就要把它发布到中央仓库。接下来我们讲讲如何利用 Maven 将 Java 项目发布到中央仓库。

Maven 中央仓库

平时我们开发 Java 项目配置的依赖都可以从 Maven 中央仓库或者其镜像仓库下载。Maven 中央仓库由 Sonatype 公司进行维护,网址是 https://central.sonatype.com/,当然不少公司也维护了自己的开源仓库,我们主要讲讲怎么将 Java 库发布到中央仓库。

注册账户

首先需要在它们的网站上注册一个账户。点击右上角的登陆(Sign In)打开登陆页面,然后点击注册(Sign up),跟着向导一步步操作即可。

创建命名空间

注册成功之后系统会弹出一个添加命名空间的界面。发布依赖需要一个命名空间,也就是 maven 依赖的 groupId。如果自己没有申请公网域名的话,可以使用 github 的免费域名。如果使用 github 账户登录,有可能不会弹出这个界面。因为系统自动创建一个 io.github.<GitHub username> 的命名空间。

验证命名空间

我们需要验证域名的所有权。

如果是 github 域名,在自己的 github 上创建一个临时项目,证明域名是自己的。系统会提供一个临时仓库名字,域名验证成功后可以删除。

如果是其他域名,需要添加 DNS 的 TXT 记录(https://central.sonatype.org/faq/how-to-set-txt-record/)。

创建之后,等待一会儿,就可以看到命名空间的状态变为 Verified 已验证。

在这里插入图片描述

配置 POM 文件

接下来就是最重要的配置项目的 POM 文件了。官方对 POM 文件有一些基本要求,有以下几个方面。

增加标签

主要需要添加几个标签,如下所示:

<project>
    <url>https://github.com/xxx/xxx</url>

    <issueManagement>
        <system>GitHub Issues</system>
        <url>https://github.com/xxx/xxx/issues</url>
    </issueManagement>
    <scm>
        <connection>scm:git:https://github.com/xxx/xxx.git</connection>
        <developerConnection>scm:git:git@github.com:xxx/xxx.git</developerConnection>
        <url>https://github.com/xxx/xxx</url>
    </scm>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>xxx</id>
            <name>xxx</name>
            <email>xxx@xxx.com</email>
            <organizationUrl>https://github.com/xxx</organizationUrl>
            <roles>
                <role>owner</role>
                <role>developer</role>
            </roles>
        </developer>
    </developers>
</project>

每次发布前也注意修改我们项目的版本号,维护好版本号也是对使用者负责。

部署包带上 source 文件和 doc 文件

Sonatype 要求部署的包要附带源代码及 API 文档 ,需要 GPG 加密,只需在 pom 文件中添加插件即可。

<!-- 源代码插件 -->
<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>
       </execution>
   </executions>
</plugin>
<!-- 发布插件 -->
<plugin>
   <groupId>org.sonatype.central</groupId>
   <artifactId>central-publishing-maven-plugin</artifactId>
   <version>0.4.0</version>
   <extensions>true</extensions>
   <configuration>
       <!-- 对应后面配置的 serverId -->
       <publishingServerId>central</publishingServerId>
       <tokenAuth>true</tokenAuth>
   </configuration>
</plugin>

GPG签名

找一个 GPG 工具(可参考官方推荐),安装之后生成 GPG 密钥。

# 创建密钥
gpg --gen-key
# 输入姓名、邮箱等信息
# 完成后可查看
gpg --list-keys

类似下图所示。
在这里插入图片描述

GPG 是密钥对,需要将公钥发布上去,自己保存好私钥。

# 我们把公钥放到 ubuntu 的服务器上,指定 key id
gpg --keyserver keyserver.ubuntu.com --send-keys D822B4xxxxxxxxx

这一步官方也有详细的操作指南

使用 Maven 发布

发布前需要在 Sonatype 网站上获取 token。
在这里插入图片描述

然后在 Maven 的 settings.xml 文件中配置发布服务器账号。

<settings>
  <servers>
    <server>
      <id>central</id>
      <username>token-username</username>
      <password>token-password</password>
    </server>
  </servers>
</settings>

然后我们使用 Maven 的命令发布。

# 为了节省时间这里跳过单元测试
mvn deploy -DskipTests

执行成功之后,在 sonatype 网站就可以看到上传的文件了。但这个时候还没有真正地发布,点击 Publish 按钮。
在这里插入图片描述

查看状态修改后才算真正地发布了,如果我们使用 Maven 中央仓库,应该很快就能下载到,如果是其他镜像仓库,可能要等上一天左右。
在这里插入图片描述

就是这么简单,赶紧去发布我们的 Java 库吧。

  • 33
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值