Gradle 使用阿里雲倉庫以及 'lastest.integration'或'+'問題
阿新 • • 發佈:2019-01-11
AndroidStudio使用Gradle進行依賴管理和下載,預設我們會使用三個maven中央倉庫:
repositories {
mavenCentral()
google()
jcenter()
}
這三個倉庫都是海外伺服器,國內如果想訪問只能搭梯子,速度也不是很快。阿里雲提供一個國內的雲倉庫,可以用來替代這些海外的倉庫。
repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() google() jcenter() }
如果要用到第三方的開源庫,只需要新增具體的dependencies即可:
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
有的時候我們希望每次使用最新版本的庫,會這麼幹:
implementation 'com.android.support:appcompat-v7:lastest.integration' implementation 'com.android.support.constraint:constraint-layout:+'
如果沒有梯子,進行編譯,會報錯:
這就很奇怪了,都已經配置了阿里雲的倉庫,還是包這種錯,肥啦吧唧阪田感覺沒鳥用。如果刪除:
mavenCentral()
google()
jcenter()
僅保留阿里雲的倉庫,就能夠編譯通過。這裡是不是有一萬個?號,按照正常原理來說,阿里雲倉庫配置是放在這些國外倉庫的前面,優先順序是高於這些國外倉庫的。而如果把lastest.integration和+改成具體的版本號,有可以編譯通過,請求的就是阿里雲的倉庫。
總結:如果使用lastest.integration和+,系統就會走海外伺服器,沒有海外倉庫,就走過來倉庫。如果沒有梯子就報錯。
這是什麼原因哩??
分析:其實 總結部分並不是精確,如果我們依賴一個僅阿里雲有的,編譯還是會報錯。也就是說,只要存在lastest.integration和+,總是會請求到海外伺服器。很有可能的原因是,為了找到最新的那個版本,gradle會去請求所有倉庫,如果請求出現網路失敗,則直接報錯,也就是說哪怕某個依賴僅存在於某個倉庫裡面,gradle依然會遍歷請求所有倉庫,如果有或者沒有,都不會出錯,但是不能請求不了,也就是不能在網路請求階段出錯。
解決方案:不使用lastest.integration和+,