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的账号申请以及项目申请

首先;我们到SonatypeJira上边注册SonatypeJira账号。
需要在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去找到我们刚刚发布的包并继续发包流程。
包刚上传上来你会发现只有Refresh、Close和Drop可以点击,这个时候我们如果想立即发布直接点击Close,通过页面的下半部分可以看到处理的状态,刷新需要我们点击Refresh进行刷新,每一次点击Close都是一个单独的Task,如果Task中每个环节都是绿色通过的状态,那么这个包的状态就回变成closed,Release菜单就可以点击发布了,操作完后等待差不多10分钟就可以访问发布包的新版本了。

本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,708评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,520评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,583评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,178评论 4 8