本文介绍了Maven、JCenter、MavenCenter、JitPack、Bintray的概念以及如何在新版的Bintray网站上发布Library并提交到JCenter上java
因为Bintray网站增长了Organization的概念,因此我在发布Library的时候发现网上不少文章都已通过时了。网站样子发生了很大的变化。因此在这篇文章把如何在最新的Bintray上发布Library到JCenter上作个整理android
相信不少人分不清这几个概念究竟表明什么,只知道跟着开源库的引入步骤走,好比以下的库,要你在root下的gradle中加一个maven地址,而后在app的gradle中加compilegit
如今咱们将Maven、JCenter、MavenCenter、JitPack、Bintray这几个概念分个类解释下github
在用Eclipse+Ant组合的时候,咱们每每引入一个库都是下载jar包或者aar包放到lib目录下,而后右键添加引用。 But!这并不友好,好比当升级版本库的时候每每须要下载新的包替换引用,很是麻烦。 因此,当升级到Android Studio + Gradle 组合后 gradle中提供了能够从远端拉取jar包和aar包引入本地。规则就是:web
compile 'com.tsy:pay:1.0.0' //groupid:projectid:version
复制代码
这个概念咱们懂了。可是这个下载源是哪呢,就是maven仓库。那maven仓库的地址是什么呢,是否是Android Studio都是从一个仓库获取包呢,这时候就须要了解 JCenter、MavenCenter、JitPack 了apache
这3个名词即具体的Maven仓库的地址,他们都是Maven仓库,可是属于不一样的服务源。总的来讲,只有两个标准的Android library文件服务器:Jcenter 和 Maven Central,如今JitPack也流行了起来。(比较方便)api
从哪引用这几个Maven仓库呢,就是在根目录build.gradle中安全
allprojects {
repositories {
jcenter() //JCenter仓库
mavenCenter() //mvenCenter仓库
maven { url "https://jitpack.io" } // jitpack仓库
}
}
复制代码
具体使用哪一个要看开源项目把Library传到了哪一个仓库。它就会要求你在这加哪一个仓库。 起初,Android Studio 选择Maven Central做为默认仓库。若是你使用老版本的Android Studio建立一个新项目,mavenCentral()会自动的定义在build.gradle中。 可是Maven Central的最大问题是对开发者不够友好。上传library异常困难。上传上去的开发者都是某种程度的极客。同时还由于诸如安全方面的其余缘由,Android Studio团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的Android Studio建立一个项目,jcenter()自动被定义,而不是mavenCentral() 咱们发现第三个jitpack的写法和前2个不同,写法是maven {} 里面加入地址,其实这个才是maven仓库标准引用方法,jcenter和mavenCenter因为是标准的Android仓库,至关于定义了一个别名。 因此一些自定义的仓库都是这种写法而后填入本身的仓库网址,好比Fabric.io的librarybash
maven { url 'https://maven.fabric.io/public' }
复制代码
Bintray其实只是一个网站,他们负责维护JCenter这个库,就是说JCenter库是托管在Bintray网站上的。 可是Bintray不仅只有JCenter库,每一个人均可以在上面建立本身的帐号,生成本身的maven仓库,好比个人帐号tangsiyuan下面建立了一个名叫"maven"的maven仓库。那个人maven仓库地址就是 https://dl.bintray.com/tangsiyuan/maven 固然也能够再build中引入服务器
maven { url 'https://dl.bintray.com/tangsiyuan/maven' }
复制代码
而JCenter仓库只是Bintray官方帐户建立的一个maven仓库,地址是 https://jcenter.bintray.com
其实我的的仓库和JCenter是平级的,只不过JCenter被Android Gradle设为了标准仓库。
上面把全部的概念都介绍清楚了。如今咱们来介绍怎么把本身的Libary传到JCenter上。(mavenCenter已通过时了,jitpack很简单就不做介绍了)
发布的前提固然是本身的Library已经完成了。具体怎么写Library就再也不赘述。给你们截个个人MyOKHttp的图就行
MyOkHttp是建立的一个完整项目,app是sample应用,myokhttp是Library
因为 Bintray网站 改版了,增长了Organization的概念,首页变成了这样
对!就是中间那个大大的绿色按钮,用那个点了就错了!!!变成了注册一个组织,注册地址是 https://bintray.com/signup
而注册我的的地址应该是 https://bintray.com/signup/oss
坑爹!重要的事情说3遍!!!
注册地址是 https://bintray.com/signup/oss
注册地址是 https://bintray.com/signup/oss
注册地址是 https://bintray.com/signup/oss
具体注册过程就很少说了,注意一点,好像不能用QQ邮箱注册
注册完成,激活邮箱,登陆后建立一个maven仓库
name写maven(由于上传的时候不指定的话默认仓库名是maven) type选择maven
建立成功后就像上图我成功建立的maven仓库同样。
在这里我使用了开源库上传本身的Library
https://github.com/novoda/bintray-release
根目录build添加
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.novoda:bintray-release:0.3.4'
}
}
复制代码
须要上传Library的build添加
apply plugin: 'com.novoda.bintray-release'
...
publish {
userOrg = 'tangsiyuan' //bintray注册的用户名
groupId = 'com.tsy' //compile引用时的第1部分groupId
artifactId = 'myokhttp' //compile引用时的第2部分项目名
publishVersion = '1.0.0' //compile引用时的第3部分版本号
desc = 'This is a okhttp3 extend library'
website = 'https://github.com/tsy12321/MyOkHttp'
}
复制代码
最后打开Termainal执行命令
./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
复制代码
其中BINTRAY_USERNAME换成bintray注册的用户名,BINTRAY_KEY换成本身的APIKEY
APIKEY的查看以下
回车执行命令,看到BUILD SUCCESS即上传成功
这时候咱们能够打开maven仓库看到本身提交的项目
在咱们上传到本身maven仓库后其实就已经能够引用本身的库了。只要在root下的build加上本身maven地址
maven { url 'https://dl.bintray.com/tangsiyuan/maven' }
复制代码
而后在app的build中加上引用便可
compile 'com.tsy:myokhttp:1.0.0'
复制代码
点Sync,能够发现引用成功。
固然若是可以提交到JCenter就更好了,再也不须要定义本身maven仓库地址,直接compile便可。 进入项目页,点击Add to JCenter
而后直接commit send就行(提交JCenter后groupID和在本地定义的同样,因此本地定义groupID要能标识我的,最好到 https://jcenter.bintray.com 看下有没有重复的包名)
最后等待Bintray审核经过。(我晚上提交,次日就审核经过了)
经过后会有右上方小邮箱按钮提示信息,提示审核经过
项目页信息多了个JCenter图标
这时候Library就已经成功提交到了JCenter,咱们回到项目中将build中的我的maven仓库引用删掉,只保留JCenter,Sync。大功告成!!!
教一个高逼格的小技巧,Github上常常会看到2个小图标
就是这两行代码
[](https://www.apache.org/licenses/LICENSE-2.0)
[ ](https://bintray.com/tangsiyuan/maven/myokhttp/_latestVersion)
复制代码
具体里面怎么替换就很少说咯。加上后感受逼格立马提升!
最后安利一波本身的2个库,欢迎star、pr
对Okhttp3进行二次封装,对外提供了POST请求、GET请求、PATCH请求、PUT请求、DELETE请求、上传文件、下载文件、取消请求、Raw/Json/Gson返回、后台下载管理等功能
https://github.com/tsy12321/MyOkHttp
对微信支付和支付宝支付的App端SDK进行二次封装,对外提供一个较为简单的接口和支付结果回调
https://github.com/tsy12321/PayAndroid