发布到 Maven Central 相关的教程挺多的,但是大部分存在问题。这篇文章是我在解决了很多问题的基础之上总结的,用来帮助需要的同学避免重蹈覆彻。需要的可收藏,万一用到了呢~
1、Farewell to Bintray jCenter
首先,告别下 bintray jcenter. 相比于 Maven Central,bintray jcenter 的性能和方便性确实好得多。可惜,jcenter 将要关闭了。jcenter 还是给我提供了很多的便利,对于其关闭深表可惜:
2、发布到 Maven Central
Step 1: 注册和激活 sonatype
发布到 Maven Central 之前,首先要到 sonatype 注册一个账号,
注册账号完账号之后需要通过创建 issue 激活账号,页面如下:
这里有几个需要注意的地方:
- 项目选择 Community Support - Open Source Project Repository Hosting
- 问题类型选择 New Project
- 概要:描述项目功能,不重要
- Group Id 比较重要,我们后续说明
- Project URL 填写自己开源项目地址即可,要与 Group Id 有一定的关联性
- SCM url 版本仓库的拉取地址,填写自己的项目的 git 链接地址,通常是项目地址后加
.git
对于这里的 group id,它就是发布完成之后,引用时的 group id. 你可以使用自己的域名,但是需要证明域名是你自己的。如果没用自己的域名,一个简单而通用的方式是使用 Github 的地址,比如我的 GitHub 地址是 https://github.com/Shouheng88 ,就可以写作 com.github.Shouheng88. 创建完 issue 之后几分钟内就会收到对方发送的邮件,邮件内会提示通过在 Github 里面创建项目来验证激活:
当我们按照邮件说明创建完项目之后,修改问题状态,过几分钟之后就激活成功了。
Step 2: 申请密钥
为了确保中央存储库中可用组件的质量水平,OSSRH 对提交的文件有明确的要求。除了 jar 包和 pom 文件,Javadoc 和 Sources 是必须的(这点和 bintray jcenter 类似),并且每个文件都要有一个对应的 asc 文件,即 GPG 签名文件,用于校验文件。所以,这步骤中我们需要申请密钥。
OSX 下面可以使用 brew 安装,
$ brew update
$ brew install -v gpg
Windows 下面也可以直接下载安装,
https://www.gpg4win.org/get-gpg4win.html
安装完毕之后,可以通过如下指令生成密钥:
gpg --generate-key
创建密钥的过程中会要求输入密码,这里的密码非常重要,我们发布的时候会使用到它。
创建完毕之后可以通过 gpg -k
显示所有已创建的密钥:
这里的字符串 AB7FxxxxxxxxxxxxABA846D44F7B66
叫做密钥指纹。后面 8 位 D44F7B66,叫做 KEY ID,我们发布的时候将使用到它。
另外,进行文件签名的时候需要用到名为 secretKeyRingFile 的文件,我们可以通过如下命令生成:
gpg --export-secret-keys [密钥指纹] > secret.gpg
在 sonatype 的仓库提交后,需要从多个公钥服务器上下载匹配的公钥,然后来校验你上传的文件的签名。所以,我们需要通过下面的命令上传公钥到公钥服务器:
gpg --keyserver keyserver.ubuntu.com --send-keys [密钥指纹]
Step 3: 准备发布脚本
首先需要引入两个插件,
apply plugin: 'maven-publish'
apply plugin: 'signing'
然后编写发布的 gralde 脚本如下
task androidSourcesJar(type: Jar) {
archiveClassifier.set("sources")
from android.sourceSets.main.java.source
exclude "**/R.class"
exclude "**/BuildConfig.class"
}
publishing {
publications {
mavenJava(MavenPublication) {
// group id,发布后引用的依赖的 group id
groupId 'com.github.Shouheng88'
// 发布后引用的依赖的 artifact id
artifactId 'sil'
// 发布的版本
version '0.1.0'
// 发布的 arr 的文件和源码文件
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
artifact androidSourcesJar
pom {
// 构件名称,可以自定义
name = 'uix-common'
// 构件描述
description = 'Android UIX'
// 构件主页
url = 'https://github.com/Shouheng88/Android-uix