说明
本文主要介绍使用 Gradle 工具发布 Jar 包到中央仓库的方法及可能碰到的问题的处理。本文假定读者已经熟悉使用 Gradle,IDEA 等工具,并对中央仓库有所了解。本文使用 macOS,在安装gpg工具时可能有所不同,如果使用 Windows 系统需要自行查阅相关安装方法。
准备
首先阅读官网文档 必备条件,对上传条件有基本的了解,有助于排查问题。
jar 包打包时,需要包含Javadoc 和 源文件。
需要有文件的校验文件,需要
.md5和.sha1格式,sha256和sha512也是支持的,但不作为强制要求。jar 文件需要使用 GPG/PGP 签名。
pom 文件需要包含足够的元信息。
坐标地址信息:groupId,artifactId 和 version。
项目信息:name,description 和 url。
许可证信息 :licenses
开发者信息:developers
源代码管理信息:scm
其次注册 Sonatype 的账户,点击 Maven Central 进行注册。
登录后,创建Namespace,可参看官方文档Register a Namespace。
进入 Namespace 模块,然后点击 Add Namespace 按钮,Namespace 是唯一的,且要验证,所以不能随便填写,可以配置自己的域名,比如我的域名是goldsyear.com,就填写com.goldsyear。域名的验证方法是配置 DNS 的 TXT 解析,配置域名的@记录,值为创建 Namespace 时提供的文本。如果没有域名,也可以使用Github的域名,比如我的Github用户名是crazy-airhead,则这里可以配置为io.github.crazy-airhead。Github的验证方式是根据给定个名称创建一个public repository。
进入 Account 模块,然后点击 Generate User Token,复制下对应的用户信息,发布时会用到。
接着阅读官网文档 使用 PGP 签名:
- 安装GnuPg, https//www.gnupg.org/download/。Mac 可以使用 homebrew 进行安装。
1 | # 安装 |
- 生成密钥对,使用如下命令,然后按提示设置密钥信息及密码。
1 | gpg --gen-key |
- 查看
1 | gpg --list-keys |
注意,051ECC562CC746FA72B42AF75DCE24021229C603是keyid,后续需要使用。
- 发布公钥。
1 | gpg --keyserver keyserver.ubuntu.com --send-keys 051ECC562CC746FA72B42AF75DCE24021229C603 |
因为众所周知的原因,可能访问不上,可以尝试使用备用域名(keyserver.ubuntu.com,keys.openpgp.org,pgp.mit.edu),或者科学上网。
- 导出密钥
1 | gpg --export-secret-keys --armor 051ECC562CC746FA72B42AF75DCE24021229C603 > abc.asc |
配置环境变量
1 | vi .zshrc |
这里需要注意用户名和密码从 Maven Central 的 Account模块获取,使用冒号拼接后进行Base64的编码。
发布
官方没有提供 gradle 的发布插件,推荐的是jreleaser插件,可是我没有配置成功,于是看了另一个替代yananhub/flying-gradle-plugin,结果很简单,基本上按官网的事例说明配置即可,主体配置如下,说明写在注释中:
1 | plugins { |
通过使用publishToMavenCentralPortal任务上传bundle:
1 | ./gradlew publishToMavenCentralPortal |
如果发布常规可以登录 Maven Central 查看发布的情况,如果是PUBLISHING状态就说明正在发布耐心等待就可以了。
可能碰到的问题
发布失败,提示401。
需要从Maven Central 生成 Token。注意是Base64编码,且格式是username:passowrd。
发布提示,密钥格式错误。
useInMemoryPgpKeys 的第一个参数是密钥的路径,不是keyid,也不是密钥的内容。
发布校验失败,提示需要jardoc包
1
2
3 java {
withJavadocJar()
}
发布检验失败,提示需要源码文件
1
2
3 java {
withSourcesJar()
}
发布检验失败,签名验证失败。
检查密钥的公钥信息是否发布服务器。
1 gpg --keyserver keyserver.ubuntu.com --send-keys 051ECC562CC746FA72B42AF75DCE24021229C603