发布 Android 库至 MavenCentral 详解
Sonatype 账号 MavenCentral 和 Sonatype 的关系
库平台 运营商 管理后台 MavenCentral Sonatype oss.sonatype.org 因此我们要发布 Library 到 Maven Central 的话,首先需要 Sonatype 的账号以及权限。
申请 Sonatype 账号申请地址: https://issues.sonatype.org/secure/Signup!default.jspa
登录账号创建 issue 创建 issue 地址: https://issues.sonatype.org/secure/ViewProfile.jspa
点击 Create 按钮, 然后会弹出 Create Issue 的窗口:
点击 Configure Fields , 选择 Custom 选项
grouId 的话最好使用: io.github.github_name, 要不然使用其他的还需要在 DNS 配置中配置一个 TXT 记录来验证域名所有权
填写完所有的信息点击创建,一个新的 issue 就创建成功了,以下就是我创建的 issue,附上链接: https://issues.sonatype.org/browse/OSSRH-83290
值得注意的是 sonatype 要求我们创建一个 github 仓库来验证我们的 gihu 账号。创建完仓库之后,我们回复热心的工作人员,接下来就是等他们的处理结果了。大概 30 分钟就能好吧
收到这样的回复,代表一切 ready 了你可以上传 package 到 maven central 。
编写 gradle 脚本上传 Lib 这篇文章里面,我是使用的 android library 做例子的。如果你想要发布 java 的 Library,可以参考: https://docs.gradle.org/current/userguide/publishing_maven.html
In module project, build.gradle file// add maven-publish and signing gradle pluginplugins {id 'maven-publish'id 'signing'}
// add publish scriptpublishing {publications {release(MavenPublication) {pom {name = 'Image Picker Compose'description = 'An Image Picker Library for Jetpack Compose'url = 'https://github.com/huhx/compose_image_picker'
}
// signing, this need key, secret, we put it into gradle.propertiessigning {sign publishing.publications.release}ossrhUsername 和 ossrhPassword 是我们在第一步注册的 sonatype 账号。用户名和密码是敏感信息,所以我们放在 gradle.properties 并且不会提交到 github. 所以在 gradle.properties 文件中,我们添加了以下内容:
signing information
signing.keyId=keysigning.password=passwordsigning.secretKeyRingFile=file path
sonatype account
ossrhUsername=usernameossrhPassword=password 其中包含了签名的三个重要信息,这个我们会在下面详细讲解
创建 gpg 密钥我使用的是 mac,这里就拿 mac 来说明如何创建 gpg 密钥。以下是 shell 脚本
安佳 gpg
brew install gpg
创建 gpg key,过程中会提示你输入密码。
记住这里要输入的密码就是上述提到你需要配置的 signing.password
gpg --full-gen-key
切换目录到~/.gnupg/openpgp-revocs.d, 你会发现有一个 .rev 文件。
这个文件名称的末尾 8 位字符就是上述提到你需要配置的 signing.keyId
cd ~/.gnupg/openpgp-revocs.d && ls
创建 secretKeyRingFile, 以下命令会创建一个文件 secring.gpg
然后~/.gnupg/secring.gpg 就是上述提到你需要配置的 signing.secretKeyRingFile
cd ~/.gnupg/ && gpg --export-secret-keys -o secring.gpg 把 signing 相关的信息成功填写到 gradle.properties 之后,我们就可以借助 maven-publish 插件发布我们的 andoird 包到 maven 的中心仓库了
maven publish 的 gradle task
这个是发布到我们的本地,你可以在~/.m2/repository/的目录找到你发布的包
./gradlew clean publishToMavenLocal
这个是发布到 maven 的中心仓库,你可以在 https://s01.oss.sonatype.org/#stagingRepositories 找到
./gradlew clean publish 我们执行 ./gradlew clean publish 发布之后,访问地址: https://s01.oss.sonatype.org/#stagingRepositories
你会看到你的 android 包已经在 nexus repository 了。接下来你要做的两步就是 Close and Release.
检验以及发布第一步:点击 Close 按钮,它会触发对你发布包的检验。我在这个过程中碰到一个 signature validation 失败的问题。
失败原因:No public key inhkp://keyserver.ubuntu.com:11371,是因为同步 key 可能会花些时间。这里我们可以收到发布我们的 key 到相应的服务器上
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys signing.keyId 第二步:确保你填入的信息是满足要求之后,Release 按钮就会被激活。点击 Release,接下来就是等待时间了,不出意外的话。30 分钟你可以在 nexus repository manager 找到,但是在 https://search.maven.org 找到的话得花更长的时间。
评论