1. MavenCentral和JCenter
Maven Central 是由sonatype.org维护的Maven服务器。jcenter是由 bintray.com维护的Maven服务器。虽然Maven Central和jcenter都是标准的maven仓库服务器,但是它们维护在完全不同的服务器,由不同的人提供内容,两者之间毫无关系。在jcenter上存在的开源库,可能 在Maven Central 上并不存在,反之亦然。我们都知道MavenCentral对开发者不够友好,它的发布库工作略显繁杂且缓慢。所以我们一般都比较喜欢先将开源库发布到jcenter后再同步到MavenCentral,这样可以做到一举两得,开源库在两个maven仓库服务器上都有发布。当然,有一件事情你必须要知晓明白:无论你是将开源库发布到Maven Central还是jcenter,你都要注册一个相应的用户。
2. Maven Central用户注册
如果你只想把开源库发布到jcenter服务器,那么请直接忽略掉整个Maven Central用户注册过程。直接跳到提纲3后继续阅读本文。
(1)在https://issues.sonatype.org中注册并激活用户。
(2)登录用户,点击“Create”创建一个issue
-Summary:填写名称,可以是任意内容
-Description:填写描述
-Group Id:域名反转(有效域名),如果没有域名,就直接使用自己的github反转(如github.com/thepacific反转后是com.github.thepacific,其中thepacific是你的github用户名,为了规范化,建议全小写)
-Project URL:项目的url,可以是项目的github地址
-其他的条目可以不填,然后提交审核即可(审核通过前,你的仓库是无法使用的)
(3)issue审核期一般在2天内,如果审核通过后会发邮件通知你,登录后查看“issue->上面创建的名称”,你会发现它的等待状态为“resolved”,至此恭喜你,你的仓库可以正常使用了。
注意:一个用户只需要创建一个issue就可以了,多创建了,人家也不会给你审核通过,容易招管理员厌恶。(你可以把issue想象成你的专属maven仓库,把你所有的开源库都提交到这里就对了)
3. jcentral用户注册
(1)在https://bintray.com/中注册并激活用户
(2)登录用户,找到“Your Profile-->Edit”编辑你的资料
(3)“Your Profile-->Edit-->Accounts”,在Sonatype OSS User处填写你的Maven Central用户名(这一步不是必须的,如过你没有Maven Central账户或者不想将开源库同步到Maven Central服务器,可以忽略该步骤)
(4)“Your Profile->Edit-->API Key” 记录下这个key值,它会在发布开源库的时候要用到
(5)“Your Profile” 找到maven仓库,这个就是你可以发布开源库的maven仓库,它限定了名字是:maven
4. 提交工作过程
无论是jcenter还是Maven Central都要求你在发布开源库的时候提供aar 、source.jar、javadoc.jar、pom等必须文档。此外,Maven Central还要求你提供相应的GPG签名。所以我们开原库发布的整个过程大致是这样:上传PGP签名 --> 打包aar 、source.jar、javadoc.jar、pom等必要文档 -->上传到jcenter --> 提交加入jcenter审核 --> 在审核上一步的审核通过后,再同步到Maven Central(如果你只需要将开原库发布到jcenter那么你可以忽略上传PGP签名和同步到Maven Central步骤),如下图:
5. 具体实施步骤
(1)创建 GPG 签名
如果你用的是windows或者OSX,那么请到GPG 生成工具下在相应的工具安装(linux系统一般自带了,无需下载安装,如果你的linux系统不存在gpg工具,那么就在控制台终端像往常安装软件一样安装它就行了)。安装完GPG生成工具后,创建和上传签名具体步骤是在命令行运行依次如下命令:
$ gpg --gen-key
$ gpg --list-keys
$ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys your-public-key-id
$ gpg -a --export your-email@your-mailbox.com> public_key_sender.asc
$ gpg -a --export-secret-key your-email@your-mailbox.com> private_key_sender.asc
解释如下图:
(2)配置GPG 签名。在计算机本地 gradle 运行环境的属性文件(位于~/.gradle/gradle.properties,如果没有请自行手动创建)添加内容:
signing.keyId=your-public-key-id
signing.password=your-gpg-password
signing.secretKeyRingFile=/Users/your-user-name/.gnupg/secring.gpg
(3)在你的gradle.properties 文件中配置你自己的pom文件信息。(只要将模板中内容一一替换成你自己的即可。模板中有中文注释提示。具体模板点击连接:https://github.com/ThePacific/maven-push )
(4)在你的local.properties 文件中配置你自己的jcenter用户名和之前提到的API Key,Maven Central的用户名和密码,以及PGP密码信息。(注意这个文件事关账户密码,不要轻易git push到服务器上。只要将模板中内容一一替换成你自己的即可。模板中有中文注释提示。具体模板点击连接:https://github.com/ThePacific/maven-push )
(5)在android studio中创建artifacts.gradle 脚本文件,把它放在gralde文件夹下。它主要作用是脚本化生成source.jar和javadoc.jar文件。 (无需修改模板,直接拿来用即可。模板中有中文注释提示。具体模板点击连接:https://github.com/ThePacific/maven-push )
(6)在android studio中创bintray_push.gradle 脚本文件,同样把它放在gralde文件夹下。它主要作用是脚本化完成打包、上传、同步工作等等工作。(将模板中的“developers”以及bintray—pkg下的”name"和“labels”修改为你自己的信息即可。模板中有中文注释提示。将具体模板点击连接:https://github.com/ThePacific/maven-push )
(7)在你工程下的全局gradle.build文件的dependencies下加入以下插件引用:
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath ‘org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1‘
(8)在你工程library module下的gradle.build文件加入:apply from: "../gradle/bintray_push.gradle"
(9)编译工程,然后在android studio终端执行:gradlew bintrayUpload任务(也可以在gradle面板执行点击执行bintrayUpload任务)。等待.......一两分钟,正常情况下,开原库在第一次提交的时候,你会发现有一个同步到Maven Central失败(Sync Maven Central failed)提示。哈哈哈,不用慌张。为什么呢(不知道原因的肯定是没有仔细阅读“提交工作过程”内容)?因为你的开原库在jcenter上没有都被审核通过,所以没法被同步到Maven Central。
(10)登陆jcenter,导航到你的开源库展示页面,点击“Maven Central”,选在“Click here to get it inclued”来提交开源库发布申请
然后它会跳转到package管理页面,点击“Include My Package”,输入开源库名字,选择你的开源库,最后填写,提交信息即可。
(11)等待.......几个小时。就会收到审核通过通知(在jcenter主页的消息页面查看通知,邮件也会收到通知)。如果看到“approved”字眼,恭喜你,你的开源库已经在jcenter发布完成,可以被广大开发人员通过gralde complie使用了。
(12)登陆jcenter,导航到你的开源库展示页面,输入Maven Central用户名和密码之后,点击“Sync”,数分钟后你就看到同步成功提示。同样恭喜你,你的库已经在Maven Central得到发布,可以被广大开发人员通过gralde complie使用了。
(13)步骤10、11、12一般是在开源库第一次发布的时候是必须的,之后升级更新,都不需要手动操作了,因为我们之前的脚本文件,已经帮我们干了这些事。
6. 常见错误
(1)java代码字符不是utf-8格式,导致javadoc生成失败,脚本无法完成上传,因为必要文件缺一不可。
(2)java代码注释有问题,导致javadoc生成失败,脚本无法完成上传,因为必要文件缺一不可。
(3)gpg签名生成或者配置不正确,导致签名失败,无法被同步Maven Central。
(4)jcenter或者Maven Central用户名不是全小写导致远程仓库url不匹配,出现404
转载请注明出处:http://www.jianshu.com/p/080a74726c09
maven-push脚本模板项目主页:https://github.com/ThePacific/maven-push