来开源吧,发布开源组件到 MavenCentral 仓库超详细攻略

本文详细介绍了如何将开源组件发布到 MavenCentral 中央仓库,包括概念梳理(POM、仓库和Sonatype关系)、新建Sonatype项目、生成GPG密钥对、配置发布脚本和发布组件的全过程。作者分享了每个步骤的详细操作,包括创建Sonatype JIRA账号、验证GroupId所有权,以及使用vanniktech的发布插件,还记录了一些常见问题及解决办法。
摘要由CSDN通过智能技术生成

前言

当一个开发者的水平提升到一定程度时,会有由内向外输出价值的需求,包括发布开源项目。而要发布开源组件,则需要将组件发布到公开的远程仓库,如 Jitpack、JenCenter 和 MavenCentral。其中,MavenCentral 是最流行的中央仓库,也是 Gradle 默认使用的仓库之一。

在这篇文章里,我将手把手带你发布组件到 MavenCentral 中央仓库。本文的示例程序使用小彭的开源项目 ModularEventBus 有用请给 Star,谢谢。

这不仅仅是一份攻略,还带着踩过一个个坑留下的泪和挠掉一根根落的宝贵发丝~~~

开发者系列文章:

1. 概念梳理

1.1 什么是 POM?

POM(Project Object Model)指项目对象模型,用于描述项目构件的基本信息。一个有效的 POM 节点中主要包含以下参数:

参数 描述 举例
groupId 组织 / 公司名 io.github.pengxurui
artifactId 组件名 modular-eventbus-annotation
version 组件版本 1.0.0
packaging 格式 jar

1.2 什么是仓库(repository)

在项目中,我们会需要依赖各种各样的二方库或三方库,这些依赖一定会存放在某个位置(Place),这个 “位置” 就叫做仓库。使用仓库可以帮助我们管理项目构件,例如 jar、aar 等等。

主流的构建工具都有 2 个层次的仓库概念:

  • 1、本地仓库: 无论使用 Linux 还是 Window,计算机中会有一个目录用来存放从中央仓库或远程仓库下载的依赖文件;
  • 2、远程仓库: 包括中央仓库和私有仓库。中央仓库是开源社区提供的仓库,是绝大多数开源库的存放位置。比如 Maven 社区的中央仓库 Maven Central ;私有仓库是公司或组织的自定义仓库,可以理解为二方库的存放位置。

1.3 Sonatype、Nexus 和 Maven 的关系:

  • Sonatype: 完整名称是 Sonatype OSSRH(OSS Repository Hosting),为开源项目提供免费的中央存储仓库服务。其中需要用到 Nexus 作为仓库管理器;
  • Nexus: 完整名称是 Sonatype Nexus Repository Manager,是 Sonatype 的另一款产品,用作提供仓库管理器。Sonatype 基于 Nexus 提供中央仓库,各个公司也可以使用 Nexus 搭建私有仓库;
  • Maven: 完整名称是 Apache Maven,是一种构建系统。除了 Maven 之外,Apache Ant 和 Gradle 都可以发布组件。

2. 新建 Sonatype 项目

从这一节开始,我将带你一步步完成发布组件到中央仓库的操作(带你踩坑)。

2.1 准备 Sonatype JIRA 账号

进入 Sonatype 仪表盘界面,登录或注册新账号: https://issues.sonatype.org :

2.2 新建工单

点击仪表盘面板右上角的 ”新建“ 按钮,按照以下步骤向 Sonotype 提交新建项目的工单:

填写方法总结如下:

  • 项目: 使用默认选项 Community Support - Open Source Project Repository Hosting (OSSRH);
  • 问题类型: 使用默认选项 New Project;
  • 概要: 填写 Github 仓库相同的名称,以方便查找;
  • GroupId 组织名: 填写发布组件时使用的 groupId,后续步骤中会检查你是否真实拥有该 groupId,所以不可以随便填写,有 2 种填写方式:
    • 使用 Github 账号: 按照 io.github.[Github 用户名] 的格式填写,后续步骤中 Sonatype 通过要求我们在个人 Github 仓库中新建指定名称的临时代码库的方式来做身份验证;
    • 使用个人域名: 按照逆序域名的格式填写,例如个人域名为 oss.sonotype.org ,则填写 org.sonotype.oss 。
  • Project URL 项目地址: 填写 Github 项目地址,例如: https://github.com/pengxurui/ModularEventBus ;
  • SCM url 版本控制地址: 在 Github 项目地址后加 .git ,例如 https://github.com/pengxurui/ModularEventBus.git 。

2.3 验证 GroupId 所有权

点击弹出的消息进入工单详情页,刚新建的工单要等待 Sonotype 机器人回复,等待大概十几分钟后,在工单底部的评论区会告诉我们怎么操作。

至此,Sonotype 项目准备完毕。

3. 新建 GPG 密钥对

GPG(GNU Privacy Guard)是基于 OpenPGP 标准实现的加密软件,它提供了对文件的非对称加密和签名验证功能。所有发布到 Maven 仓库的文件都需要进行 GPG 签名,以验证文件的合法性。

3.1 安装 GPG 软件

安装 GPG 软件有两种方式:

  • 方式 1 - 下载安装包: 通过 GPG 官方 下载安装包,这个我没试过;
  • 方式 2 - 通过 Homebrew 安装: 使用 Homebrew 执行以下命令:

命令行

# 通过 Homebrew 安装 gpg
brew install gpg

如果本地没有 Homebrew 环境则需要先安装,这里也容易踩坑。小彭本地原本就有 Homebrew 环境,但是安装 gpg 的过程中各种报错,最后还是用了最暴力的解法才解决 —— 卸载重装 Homebrew:(

参考资料: MacOS下开发环境配置--homebrew的安装

3.2 生成 GPG 密钥对

使用 --generate-key 参数,按照指引填写相关信息和 passphrase 私钥口令。另外,使用 --list-keys 参数可以查看当前系统中生成过的密钥。

命令行

# 密钥生成命令
gpg --generate-key

# 密钥查看命令
gpg --list-keys

命令行演示

GPG 在生成密钥对时,会要求开发者做一些随机的举动,以给随机数加入足够多的扰动,稍等片刻就会生成完成了。完成后可以随时使用 —list-keys

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值