Android发布库到MavenCentral说明以及踩坑解决

Android发布库到MavenCentral说明以及踩坑解决

jcenter即将停止服务,由于之前我们好多库都是发布到jcenter上,现在必须抓紧找下家才行,我们针对jitpack和mavencentral进行了调研,结果如下:
– jitpack的发包必须需要将源码发布到github上,这中情况对于我们的产品自用SDK的情况非常不友好
– mavencentral不用公布源码到github上,和自建Nexus Repository Manager去管理发布库很类似,只要把需要配置的gradle选项配置到项目中去,并且把签名和发布地址以及账号配置好就可以通过Android Studio的gradle进行操作把包上传到Sonatye上进行Android包管理。

发包到mavencentral的具体操作流程和踩坑总结

一、 Sonatype jira的账号申请以及项目申请

  1. 首先;我们到SonatypeJira上边注册SonatypeJira账号。
  2. 需要在SonatypeJira中的issues projects界面中创建一个issue用来申请一个项目。

由于截图篇幅有限最下面的Already Synced to Central 选择 No,因为这是我们新申请的。

创建完成后,管理员会在第一时间处理新建的这个issue,等待管理员回复就可以,在后续的回复,如果不是在github上的开源项目,你要用自己的域名就需要在管理员的指导下完成域名的验证工作。域名验证完成后,这个issue的状态就回标识为RESOLVED,下面就可以准备使用gradle上传你的库了,只要在group id下的所有库都支持。

所有的issue操作都会同步到注册账号的邮箱上边,可以及时了解所有动态。

二、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 '最好是申请账号时用的邮箱'
                    }
                }
            }
        }
    }
}

三、 签名

之所以签名作为这一块来说说明它很重要也很容易踩坑。我这里用的是Mac系统所以就以Mac系统来说明了。

1. 创建GPG密钥

在往上找到一些关于创建GPG密钥的文章,安装方式各异,我这里使用的命令行安装,不过首先Mac电脑上需要安装了brew才可以,相信brew怎么安装作为程序员的我们应该是必不可少的,这里就不赘述了,下面说一下如何安装GPG:
在命令行使用如下命令

brew install gpg

等待安装完成就可以。

2. 创建密钥

在命令行中使用如下命令作为开始

gpg --full-gen-key

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

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

~/.gnupg/openpgp-revocs.d

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

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

gpg --export-secret-keys -o secring.gpg

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

3. 设置配置文件

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

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

记住这个配置文件一定放在.gradle目录下才会生效,这个问题困扰了我小半天时间。也就是完整路径是

~/.gradle/gradle.properties

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

四、发布的准备

通过上面的步骤我们已经把我们的要发布的包传到SonaType的nexus repository manager系统里了。

可以看到图中我写了很多字,由于我这里没有预发布的包所以我就以红框为例了,大家可以自行去发布查看具体的结构。

发布的步骤很简单,分为一下几步操作就可以

1. 登录nexus repository manager平台

我们上传到库都托管到nexus repository manager平台,所以我们需要使用之前申请的sonaType的账号去登录这个托管平台来管理我们的包。

2. 通过点击Staging Repositories去找到我们刚刚发布的包并继续发包流程。

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

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
京ICP备17066706号-1
0
希望看到您的想法,请发表评论。x
()
x