Android開源專案釋出jCenter

weixin_34162695發表於2018-02-08

最近有這方面需要,所以研究了一下如何將自己的工程專案釋出到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檔案,和你要釋出的modulebuild.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']
}複製程式碼

好好解釋一下上面這些引數。

  1. userOrg:Bintray網站註冊時的使用者名稱。最簡單的檢視方法就是,登入了Bintray網站之後,看瀏覽器地址,上面會寫著你的使用者名稱,頁面上也有。
  2. groupId:jCenter上的路徑。拿rxjava舉例,它的引用方式是

    complie io.reactivex.rxjava2:rxjava:2.x.y複製程式碼

    ,那麼它的groupId就是io.reactivex.rxjava2。
  3. artifactId:這是你在jCenter上專案的名字。一般跟你的專案中module名稱一致。
  4. publishVersion:釋出的版本號。遞增的。
  5. 後面三個,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了。


相關文章