1. 程式人生 > >Gradle for Android——依賴管理

Gradle for Android——依賴管理

依賴管理是Gradle最閃耀的地方,最好的情景是,僅僅只需新增一行程式碼在你的build檔案,Gradle會自動從遠端倉庫為你下載相關的jar包,並且保證你能正確使用它們。當你在工程裡添加了多個相同的依賴,gradle會為你排除掉相同的jar包。

倉庫 當我們討論依賴的時候,我們通常說的是遠端倉庫,就像那些依賴庫專門用來提供給其他開發者使用的依賴庫。手動管理依賴將會為你帶來很大麻煩。你必須定位到該依賴檔案位置,然後下載jar檔案,複製該檔案到你的專案,然後引用它們。通常這些jar檔案還沒有具體的版本號,所以你還必須去記憶它們的版本號,這樣當需要更新的時候,你才會知道需要替換成哪個版本。你同時必須將該依賴包放在svn或者git上,這樣你的其他同事才可以不用手動去下載這些依賴jar。

使用遠端倉庫可以解決這些問題,一個倉庫可以被視為一些檔案的集合體。Gradle不會預設為你的專案新增任何倉庫。所以你需要把它們新增到repositories方法體內。如果是使用的是Android studio,那麼工具已經為你準備好了這一切:

repositories{
  jcenter()
}

Gradle支援三種不同的倉庫,分別是:Maven和Ivy以及資料夾。依賴包會在你執行build構建的時候從這些遠端倉庫下載,當然Gradle會為你在本地保留快取,所以一個特定版本的依賴包只需要下載一次。

一個依賴需要定義三個元素:group,name和version。group意味著建立該library的組織名,通常這會是包名,name是該library的唯一標示。version是該library的版本號,我們來看看如何申明依賴:

dependencies{
  compile 'com.google.code.gson:gson:2.3'
  compile 'com.squareup.retrofit:retrofit:1.9.0'
}

上述的程式碼是基於groovy語法的,所以其完整的表述應該是這樣的:

dependencies{
  compile group:'com.google.code.gson',name:'gson',version:'2.3'
  conpile gruop:'com.squareup.retrofit',name:'retrofit',version:'1.9.0'
}

為你的倉庫預定義

為了方便,Gradle會預設預定義三個maven倉庫:Jcenter和mavenCentral以及本地maven倉庫。你可以同時申明它們:

repositories{
  mavenCentral()
  jcenter()
  mavenLocal()
}

Maven和Jcenter倉庫是很出名的兩大倉庫。我們沒必要同時使用他們,在這裡我建議你們使用jcenter,jcenter是maven中心庫的一個分支,這樣你可以任意去切換這兩個倉庫。當然jcenter也支援了https,而maven倉庫並沒有。

本地maven庫是你曾使用過的所有依賴包的集合,當然你也可以新增自己的依賴包。預設情況下,你可以在你的home檔案下找到.m2的資料夾。除了這些倉庫外,你還可以使用其他的公有的甚至是私有倉庫。

遠端倉庫 有些組織,建立了一些有意思的外掛或者library,他們更願意把這些放在自己的maven庫,而不是maven中心庫或jcenter。那麼當你需要是要這些倉庫的時候,你只需要在maven方法中加入url地址就好:

repositories{
  maven{
    url "http://repo.acmcorp.com/maven2"
  }
}

同樣的,Ivy倉庫也可以這麼做。Apache Ivy在ant世界裡是一個很出名的依賴管理工具。如果你的公司有自己的倉庫,如果他們需要許可權才能訪問,你可以這麼編寫:

repositories {
       maven {
           url "http://repo.acmecorp.com/maven2"
           credentials {
               username 'user'
               password 'secretpassword'
           }
        } 
   }
注意:這不是一個好主意,最好的方式是把這些驗證放在Gradle properties檔案裡