本文介紹了Maven、JCenter、MavenCenter、JitPack、Bintray的概念以及如何在新版的Bintray網站上發布Library并提交到JCenter上
前言
由于Bintray網站增加了Organization的概念,所以我在發布Library的時候發現網上很多文章都已經過時了。網站樣子發生了很大的變化。所以在這篇文章把如何在最新的Bintray上發布Library到JCenter上做個整理
1 什么是Maven、JCenter、MavenCenter、JitPack、Bintray?
相信很多人分不清這幾個概念究竟代表什么,只知道跟著開源庫的引入步驟走,比如如下的庫,要你在root下的gradle中加一個maven地址,然后在app的gradle中加compile
現在我們將Maven、JCenter、MavenCenter、JitPack、Bintray這幾個概念分個類解釋下
Maven倉庫
在用Eclipse+Ant組合的時候,我們往往引入一個庫都是下載jar包或者aar包放到lib目錄下,然后右鍵添加引用。
But!這并不友好,比如當升級版本庫的時候往往需要下載新的包替換引用,非常麻煩。
所以,當升級到Android Studio + Gradle 組合后 gradle中提供了可以從遠端拉取jar包和aar包引入本地。規則就是:
compile 'com.tsy:pay:1.0.0' //groupid:projectid:version
- "com.tsy" 即GroupId,就是你在網上標識這是唯一標識你的一個組,就像Android里的包名一樣
- "pay" 就是我的項目名稱
- "1.0.0" 即版本號
這個概念我們懂了。但是這個下載源是哪呢,就是maven倉庫。那maven倉庫的地址是什么呢,是不是Android Studio都是從一個倉庫獲取包呢,這時候就需要了解 JCenter、MavenCenter、JitPack 了
JCenter、MavenCenter、JitPack
這3個名詞即具體的Maven倉庫的地址,他們都是Maven倉庫,但是屬于不同的服務源??偟膩碚f,只有兩個標準的Android library文件服務器:Jcenter 和 Maven Central,現在JitPack也流行了起來。(比較方便)
從哪引用這幾個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的library
maven { url 'https://maven.fabric.io/public' }
Bintray是什么
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 Studio設為了標準倉庫。
2 如何在新版的Bintray網站上發布Library到JCenter上
上面把所有的概念都介紹清楚了。現在我們來介紹怎么把自己的Libary傳到JCenter上。(mavenCenter已經過時了,jitpack很簡單就不作介紹了)
2.1 完成自己的Library
發布的前提當然是自己的Library已經完成了。具體怎么寫Library就不再贅述。給大家截個我的MyOKHttp的圖就行
MyOkHttp是創建的一個完整項目,app是sample應用,myokhttp是Library
2.2 Bintray網站上創建賬戶
由于 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郵箱注冊
2.3 創建maven倉庫
注冊完成,激活郵箱,登錄后創建一個maven倉庫
name寫maven(因為上傳的時候不指定的話默認倉庫名是maven)
type選擇maven
創建成功后就像上圖我成功創建的maven倉庫一樣。
2.3 上傳Library到自己創建的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倉庫看到自己提交的項目
2.4 提交到JCenter
在我們上傳到自己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
MyOkHttp
對Okhttp3進行二次封裝,對外提供了POST請求、GET請求、PATCH請求、PUT請求、DELETE請求、上傳文件、下載文件、取消請求、Raw/Json/Gson返回、后臺下載管理等功能
https://github.com/tsy12321/MyOkHttp
PayAndroid
對微信支付和支付寶支付的App端SDK進行二次封裝,對外提供一個較為簡單的接口和支付結果回調