Android 发布库到 MavenCentral流程及踩坑之旅

由于本人是mac系统,所以本文就基于mac环境。

1. Sonatype jira的账号申请以及项目申请

a. 我们到SonatypeJira上边注册账号。(按提示填写相关信息即可)

b. 需要在SonatypeJira中的issues projects界面中创建一个issue用来申请一个项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注:名称直接填写项目名就行,重点是Group ID,这里如果你没有自己的网站域名,那么一般建议按照Github填写,例如你的Github为github.com/smith,那么这里可以写成io.github.smith(新版不允许使用com.github),如果有你自己的域名,则可以按照你的域名翻转作为你的主地址,另外注意,这个申请实际上只需要申请一次,那么Group Id建议直接设置成主包名,不需要具体到项目,例如我的项目都是com.smith开头的,那么这里不要具体到com.smith.demo1,因为申请后你的所有项目都可以放到com.smith开头的maven仓库下。
当状态变为已解决,那么就说明申请成功了,如果有任何不成功的,官方会在下方给出注释,你也可以通过注释回复官方,完成申请

需注意 :
如果使用自己的域名,需要按照官方的要求,在DNS配置配置一个TXT记录指向你的Github地址来完成验证,这个比较麻烦,具体参考:官方文档。申请后请耐心等待官方的回复,待issues状态变为已解决,那么就说明申请成功了,如果有任何不成功的,官方会在下方给出注释,你也可以通过注释回复官方,完成申请。
如果使用github,可能会需要让你在所填的github地址新建一个符合要求的公开仓库来证明你拥有该地址的所有权。
所有的issue操作都会同步到注册账号的邮箱上边,可以及时了解所有动态。

2. Gradle准备
具体的详细配置官方说明Deploying to OSSRH with Gradle – Introduction,通过这篇文章可以找到标准的的发布包用的gradle脚本模板。
分享一下我用到的完整版。

apply plugin: 'maven'
apply plugin: 'signing'

def ossrhUsername = "在SonaType上申请的账号"
def ossrhPassword = "在SonaType上申请的密码"

def PUBLISH_GROUP_ID = 'com.demo.sdk' //这里可以不是直接申请时候的groupId只要开头是就可以

def PUBLISH_ARTIFACT_ID = "引用库的artifactId"

def PUBLISH_VERSION = android.defaultConfig.versionName //这个是直接获取的库gradle里配置好的版本号,不用到处修改版本号,只需要维护一份就可以。

//签名
signing {
    required { gradle.taskGraph.hasTask("uploadArchives") }
    sign configurations.archives
}

uploadArchives {
    repositories {
        mavenDeployer {

            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            pom.groupId = PUBLISH_GROUP_ID
            pom.artifactId = PUBLISH_ARTIFACT_ID
            pom.version = PUBLISH_VERSION

            pom.project {
                name '发布库的简单名称'
                packaging 'aar' //我这里发布的是安卓的包,所有写的aar
                // optionally artifactId can be defined here
                description '发布包的描述'
                url '可以写公司官网地址或github个人页面地址'

                scm {
                    connection 'scm:替换成项目git地址'
                    developerConnection 'scm:替换为git开头的项目地址'
                    url '项目首页,可以是github项目的主页'
                }

                licenses {
                    license {
                        name 'The Apache License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }

                developers {
                    developer {
                        id '这里填写申请账号时候的全名就可以'
                        name '这里随意填写就可以'
                        email '最好是申请账号时用的邮箱'
                    }
                }
            }
        }
    }
}

3. 签名

之所以签名作为这一块来说说明它很重要也很容易踩坑。

  1. 创建GPG密钥
    这里使用的命令行安装,不过首先Mac电脑上需要安装了brew才可以,这里就不赘述brew怎么安装了。在命令行使用如下命令
brew install gpg

等待安装完成就可以。

  1. 创建密钥
    在命令行中使用如下命令作为开始
gpg --full-gen-key

在执行过程会让选择加密方式,我这边使用的是RSA and RSA,长度输入4096,过期时间直接回车代表不过期,然后提示让输入User ID和一个邮箱,这里可以使用注册SonaType时候用的用户名和邮箱,当然也可以用其他的。接着最后一步输入O,注意这里是大写的O不是零,然后回车接着就会提示让输入密码,输入一次后还会有一次确认输入,这个密码一定要记住后期会用到。

以上操作完成后,你可以到你的个人账号的目录去查看一下会有这么一个目录存在

open ~/.gnupg/openpgp-revocs.d

在这个目录下有一个.rev文件,记住这个文件名称的末尾8位字符在后续的配置文件会用到。

接下来创建gpg文件,通过如下命令创建,我建议先在命令行中把目录切到~/.gnupg/下再去执行如下命令这样不会找不到文件。

gpg --export-secret-keys -o pubkeyring.gpg

执行以上命令创建文件pubkeyring.gpg,创建过程会让输入上边我们创建密钥过程中输入的密码,验证完密码后会在~/.gnupg目录生成pubkeyring.gpg文件,这个文件的路径我们后续在生成配置文件的时候也需要。

  1. 发布公钥到服务器
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥 ID(即上面.rev文件名称)

查看密钥是否发布成功

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥 ID

gpg: 密钥 8FB30104A0C2804B:“zhangchunping (O) sharetwodroid@gmail.com
未改变 gpg: 处理的总数:1 gpg: 未改变:1

这样就标志着发布成功了。

出现 gpg: 发送至公钥服务器失败:No route to host 失败的话
可以尝试以下命令或者终端翻墙或切换发布的网址

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID 将公钥发布到 PGP 密钥服务器
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公钥ID 查询公钥是否发布成功

4. 设置配置文件

在个人目录下.gradle创建配置文件gradle.properties,文件内容如下

signing.keyId=刚才获取的秘钥后8位
signing.password=之前我们执行命令时设置的密码
signing.secretKeyRingFile=刚才生成的secring.gpg文件路径
ossrhUsername=sonatype用户名
ossrhPassword=sonatype密码

记住这个配置文件一定放在.gradle目录下才会生效。也就是完整路径是

~/.gradle/gradle.properties

如果路径不对或者这个配置文件不对,上传包到SonaType是没有问题,但是在操作close的时候你会发现签名总是出错,如果路径不对就会直接跳过签名这一步,然后在SonaType在操作上传好的包时根本到不了release这一步。

4. 发布
在需要发布的modoule下面引入上面配置的gradle文件。例如:
在这里插入图片描述
sync以后会在右边任务栏对应的moudle下面看到相应的task :例如
在这里插入图片描述
点击待编译成功后就上传到了sonaType的 nexus repository manager平台。

然后到 nexus repository maanger使用你的sonatype帐号和密码登录。

进入左侧的Staging Repositories

在这里插入图片描述

在这里插入图片描述
包刚上传上来你会发现只有Refresh、Close和Drop可以点击,这个时候我们如果想立即发布直接点击Close,通过页面的下半部分可以看到处理的状态,刷新需要我们点击Refresh进行刷新,每一次点击Close都是一个单独的Task,如果Task中每个环节都是绿色通过的状态,那么这个包的状态就回变成closed,Release菜单就可以点击发布了,操作完后等待差不多10分钟就可以访问发布包的新版本了。

注:如果是第一次发布,点击完release后需要到项目issuse 下面回复下管理员

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值