最近有這方面需要,所以研究了一下如何將自己的工程專案釋出到jCenter上去。方法有很多,可以是Bintray,maven,jitPack.io等等。
本次釋出使用的Bintray,所以稍後先從如何使用Bintray網站開始。工程通過novoda進行釋出,使用起得非常方便。由於引數問題踩了幾步坑,文中也會提到,但只要仔細,這些都是可以避免的。
一、Bintray網站的使用
Step 1 註冊
在網上可以找到很多關於Bintray如何註冊的文章,也都講到了如何成為個人或企業使用者。區別在於直接在首頁點選註冊並進入網站後,預設會是一個企業使用者,需要等待30天的啟用時間,而且在專案釋出後,是沒有同步到jCenter按鈕的(add to jCenter)。
所以我們需要的是這個地址,bintray.com/signup/oss,成為個人使用者。但個人使用者是不可以建立private倉庫的,這一點值得注意。
具體的註冊資訊就按個人情況填寫即可,很快就會成為一個新的註冊使用者了,那麼第一步也就順利完成了。
Step 2 建立倉庫(Add new Repository)
建立倉庫很簡單,但是Name一定要填maven,否則後面的釋出操作是不成功的。Type也一定要選擇maven,表示是一個maven倉庫。同時可以看到,Pravite選項是disable的,這是個人使用者不可選擇的一項。下面的Licenses是可選項,點選下拉的選單可以選擇Apache-2.0。
最後點選Create建立即可,頁面會重新整理回到上一級,同時在Owned Repository中多出一個剛才新建的maven倉庫連結。
Step 3 Add New Package
maven倉庫建立完成了,來到倉庫的頁面中,點選Add New Package來建立新的Package。如果不建立的話,後面的釋出不成功哦!下面是建立時要填寫的內容,Name就填你要釋出的module的名字,website和version control,都可以填git的地址,issue可以填上你的git地址/issue。
Step 4 獲取 API key
好了,基本準備就緒了。隨後的釋出,會用到一個key,它在哪裡呢?
頁面右上角!看到Edit Profile了,點選進入到下一頁。
很明顯,左側選單下方會有一個API Key的選項,點選後輸入密碼,就可以拿到你的key了。現在怎麼做都可以,這個key到釋出的時候才會使用。
二、本地工程配置
Bintray的事搞定了,下面就開始我們自己的工程了。Android的工程如何建立,如何架構,這裡就不再描述了,當前就認為工程的事一切就緒,只差東(pei)風(zhi)了。配置的關鍵就是頂級的build.gradle檔案,和你要釋出的module的build.gradle。這兩個檔案可以幫助你完成釋出的事情,請認真對待哦!
Step 1 頂級 build.gradle
前面已經說過了,我們的方式是使用novoda來進行釋出操作,這裡首先要新增novada的引用。
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.novoda:bintray-release:0.5.0' // 可以到github上檢視他的最版本複製程式碼
上面我用到的是0.5.0版本,你也可以去github上自行使用它的最新版本,但是版本這個東西會造成很多問題,所以如果是第一次嘗試,感覺還是先按這個來,等走通了之後再去修改也不遲。
接下來需要新增對字型的設定
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}複製程式碼
下面這段要注意,之前我沒加上,在釋出的時候會報錯(報什麼錯我忘了,好像是因為引入Kotlin的原因,要是想知道的話,可以先不加這句,看看執行釋出命令的時候會出什麼錯)。
tasks.getByPath(":XXXXX:releaseAndroidJavadocs").enabled = false
tasks.getByPath(":XXXXX::bintrayUpload").enabled = true複製程式碼
其中的“XXXXX”指的是你的目標module,比如你要釋出的module叫abc,那麼改過之後的程式碼就是下面的樣子,要注意第一行是一個冒號,第二行是兩個哦,不是我寫錯了,也不是你看錯了!
tasks.getByPath(":abc:releaseAndroidJavadocs").enabled = false
tasks.getByPath(":abc::bintrayUpload").enabled = true複製程式碼
Step 2 module的build.gradle
首先就是要引入novada plugin
apply plugin: 'com.novoda.bintray-release'複製程式碼
其次,在你的android配置中,增加lint設定。
android{
......
......
lintOptions {
abortOnError false
}
}複製程式碼
接下來寫上這些東西,雖然跟頂級的重複了,但是我在沒寫的情況下,釋出失敗了
repositories {
jcenter()
}
allprojects {
repositories {
jcenter()
}
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}複製程式碼
最後,重中之重,放在最後面配置,那就是novada的配置。這些配置,你可以寫到變數裡,也可以直接寫字串裡,這裡給出後者,變數的事自己按習慣修改。
publish {
userOrg = 'foo'
groupId = 'foo.bar'
artifactId = 'bar'
publishVersion = '0.0.1'
desc = 'foo bar'
website = 'http://git.yourgit/'
licences = ['Apache-2.0']
}複製程式碼
好好解釋一下上面這些引數。
- userOrg:Bintray網站註冊時的使用者名稱。最簡單的檢視方法就是,登入了Bintray網站之後,看瀏覽器地址,上面會寫著你的使用者名稱,頁面上也有。
- groupId:jCenter上的路徑。拿rxjava舉例,它的引用方式是
,那麼它的groupId就是io.reactivex.rxjava2。complie io.reactivex.rxjava2:rxjava:2.x.y複製程式碼
- artifactId:這是你在jCenter上專案的名字。一般跟你的專案中module名稱一致。
- publishVersion:釋出的版本號。遞增的。
- 後面三個,desc是專案描述,website可以填上你專案的git地址,licences幾乎是固定的。
三、釋出到jCenter
終於走到這一步了,前面有準備全都是為了釋出。那麼開啟終端,來到我們的專案目錄下,執行命令,開始釋出。
./gradlew clean build bintrayUpload -PbintrayUser=foo -PbintrayKey=bary -PdryRun=false複製程式碼
bintrayUser要填的仍然是你的使用者名稱,bintrayKey就是上面我們說到的API Key了,複製到命令中就可以了。最後一個dryRun引數,true時表示不釋出只檢視命令是否成功,false時即執行釋出和上傳操作。
問題
如果在Bintray中,自己的maven倉庫下先Add New Package的話,這裡的命令會失敗,找不到倉庫;
message:Please enter a valid VCS URL for your OSS package.
複製程式碼
如果上面的bintrayUser和bintrayKey填錯的話,也會失敗。
message:This resource requires authentication
複製程式碼
四、add to jCetner
釋出成功後,來到你的Bintray頁面上,找到剛剛上傳的專案中並開啟頁面。你會發現右側有一個按鈕,即add to jCenter
我們要做的就是點選,進入到下一頁,輸入一些描述後,等待稽核就可以了。稽核成功後,我們的專案就算是真正的走到了jCenter倉庫中了,你的build.gradle中也不必再定義一個自己的maven了。