写点什么

发布 Android 库至 MavenCentral 详解

作者:JAVA活菩萨
  • 2022 年 8 月 06 日
  • 本文字数:2384 字

    阅读完需:约 8 分钟

发布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'


            licenses {                license {                    name = 'The Apache License, Version 2.0'                    url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'                }            }
developers { developer { id = 'huhx' name = 'hongxiang' email = 'gohuhx@gmail.com' } }
scm { connection = 'https://github.com/huhx/compose_image_picker.git' developerConnection = 'https://github.com/huhx/compose_image_picker.git' url = 'https://github.com/huhx/compose_image_picker' } }
groupId "io.github.huhx" artifactId "compose-image-picker" version "1.0.2"
afterEvaluate { from components.release } }}repositories { maven { url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username ossrhUsername // ossrhUsername is your sonatype username password ossrhPassword // ossrhUsername is your sonatype password } }}
复制代码


}


// 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 找到的话得花更长的时间。

用户头像

JAVA活菩萨

关注

还未添加个人签名 2022.07.25 加入

还未添加个人简介

评论

发布
暂无评论
发布Android库至MavenCentral详解_Java_JAVA活菩萨_InfoQ写作社区