jCenter不再接受任何新库的提交,Google也已经给出了其官方态度,建议开发者以后发布库都发布到MavenCentral上。

pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}

相对于jCenter,MavenCentral的使用显得不那么简单,发布标准、域名限制也是要限制不少。

域名准备

加入你要提交一个开源库,引用路径如下:

implementation 'com.example:core:1.0.0'

那么,你必须要拥有example.com这个域名,而这在jCenter那并不做限制。如果你没有域名,也不想花钱,也不是没有办法,我们可以使用Github/Gitee,那么我们引入的路径就成为了:

implementation 'io.github.yourusername:core:1.0.0'

implementation 'io.gitee.yourusername:core:1.0.0'

创建Issue

Sonatype Issue网址:https://issues.sonatype.org/

进入Sonatype Issue网站,创建账号并登录。

Email 邮箱,每次操作,都会收到通知
Full name 联系人名称
Username 用户名,也是登录账号,上传代码时会用到
Password 密码,至少8位,带有大小写字母和字符,上传代码时会用到

点击新建,创建Issue

项目 Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型 New Project
概要 可以随便填,或者直接填New Project
Group Id 你的开源库引用路径的Group Id;如果是github项目,就填写io.github.myusername;如果是gitee项目,就填写io.gitee.myusername
Project URL 例如https://github.com/sonatype/nexus-public
SCM url 例如https://github.com/sonatype/nexus-public.git

配置域名

Issue创建成功后,会生成一个类似OSSRH-XXXXX的ID,记下这个ID。

如果上一步的Group Id,你选择了github/gitee,那么你只需要在github中创建一个名为OSSRH-XXXXX的项目,权限设置为public。

如果您使用了自定义域名的Group Id,那么你需要在域名解析中添加一条记录。

主机记录 记录类型 记录值
@ TXT OSSRH-XXXXX

域名配置成功后,我们进入创建的问题,添加一条评论Done以告诉审核人员就可以了。

接下来就是耐心的等待,一般不会太长,5-10分钟就可以了。审核通过后,我们的Maven仓库就可以使用了。

配置签名

官方文档:https://central.sonatype.org/publish/requirements/gpg/

下载GPG

在MavenCentral上传的代码都需要GPG签名。下载地址:http://www.gnupg.org/download/

安装完成后,gpg --version查看版本。

创建GPG密钥

密钥的创建我们可以采用kleopatra生成,也可以使用命令行生成。我这里记录一下命令行生成过程:

$ gpg --gen-key

输入名称和邮箱地址

Real name: Central Repo Test
Email address: central@example.com

输入O以确认

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O

输入8位以上的密码,点击OK即可

查询所有本地生成的key列表

$ gpg --list-keys
C:\Users\Administer\AppData\Roaming\gnupg\pubring.kbx
---------------------------------------------------------
pub ed25519 2022-08-24 [SC] [expires: 2024-08-23]
EE230A4B217369C1713B5FF44F6579788EB730F1
uid [ultimate] Central Repo Test <central@example.com>
sub cv25519 2022-08-24 [E] [expires: 2024-08-23]

上传密钥至GPG服务器

gpg --keyserver keyserver.ubuntu.com --send-keys EE230A4B217369C1713B5FF44F6579788EB730F1

--keyserver指定密钥服务器地址,可选:

  • keyserver.ubuntu.com
  • keys.openpgp.org
  • pgp.mit.edu

--send-keys指定密钥的keyid

导出私钥

gpg -o D:\secring.gpg --export-secret-keys EE230A4B217369C1713B5FF44F6579788EB730F1

上传代码

build.gradle

plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
id 'maven-publish'
id 'signing'
}

group = 'GROUP ID'
version = '1.0.0'

publishing {
publications {
maven(MavenPublication) {
afterEvaluate {
artifact(tasks.getByName("bundleReleaseAar"))
}
artifactId = 'ARTIFACT ID'
pom {
name = 'MODULE NAME'
description = 'MODULE DESC'
url = 'https://github.com/example/example'
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'YOUR ID'
name = 'YOUR NAME'
email = 'YOUR EMAIL'
}
}
scm {
connection = 'scm:git:git://github.com/example/example.git'
developerConnection = 'scm:git:ssh://github.com/example/example.git'
url = 'https://github.com/example/example'
}
}
}
}
repositories {
maven {
def releasesRepoUrl = 'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/'
def snapshotsRepoUrl = 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username = ossrhUsername
password = ossrhPassword
}
}
}
}

signing {
sign publishing.publications.maven
}

gradle.properties

signing.keyId=密钥ID
signing.password=密钥密码
signing.secretKeyRingFile=D:\secring.gpg
ossrhUsername=sonatype的用户名
ossrhPassword=sonatype的密码

发布

  • 进入https://s01.oss.sonatype.org/,账号和密码就是Issue系统的账号密码。
  • 点击左侧的Staging Repositories,我们就可以看到我们上传的代码包了。
  • 上方菜单栏共包括五个按钮:Refresh/Close/Promote/Release/Drop。
  • 选中我们上传的代码包,点击Close,开始验证代码。
  • 验证完成后,点击Refrsh,再点击Release即可发布。
  • 发布完成后,我们可以立即在Sonatype的内容代码库看到我们发布的代码库,但是还不能使用依赖引入下载。一般还需要十分钟左右,您的代码版本就会出现在公开的Maven仓库列表,而这时你就可以随意使用了。

仓库地址