在由gradle管理的項目中,在項目編譯時,如果本地沒有緩存依賴的話會從遠程maven倉庫中下載所需依賴庫,而Google、JCenter、Central這些maven倉庫,其服務器都是在國外,從國內訪問時速度有點慢,有時賊慢甚至連接超時。本人家庭寬帶環境下速度一般來說快時幾百KB,慢時幾十KB甚至幾KB。所幸國內有組織代理了國外maven公共倉庫,比如阿里雲,大大節省了時間。
一般我們在項目根目錄下的build.gradle文件中加入阿里雲maven鏡像倉庫,如:
rootProject/build.gradle
buildscript {
repositories {
// 腳本中配置的順序就是查找依賴的順序,這裏會先從阿里雲鏡像倉庫查找所需的依賴並下載
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
google()
jcenter()
}
dependencies {
......
}
}
allprojects {
repositories {
// 這裏優先從阿里雲鏡像倉庫下載所需的依賴
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
google()
jcenter()
}
}
經過這樣配置之後gradle會優先去阿里雲鏡像倉庫查找依賴並下載,如果想讓每個項目都優先從阿里雲倉庫下載依賴就得在每個項目rootProject/build.gradle
文件中添加阿里雲maven倉庫地址,不太友好啊!比如使用git克隆了一個項目,然後用androidstudio打開時會立即同步然後可能下載依賴慢得令人捉急。
於是乎尋求gradle全局全局設置maven倉庫的辦法,這裏參考https://docs.gradle.org/current/userguide/init_scripts.html 。
首先在 USER_HOME/.gradle/
目錄下創建一個文件 init.gradle
( USER_HOME/.gradle/init.gradle
) 在其中加入如下內容:
// gradle腳本依賴倉庫
gradle.projectsLoaded {
rootProject.buildscript {
repositories {
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
}
}
}
// 項目依賴倉庫
allprojects {
repositories {
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
}
}
這個是gradle執行時的初始化腳本,當在項目中進行gradle同步等操作時,會解析該腳本文件,在這個腳本中配置了阿里雲maven倉庫地址,所有gradle管理的項目會優先從阿里雲maven倉庫下載依賴,然後才從項目中配置的maven倉庫中下載依賴
。可以依此添加其他maven倉庫地址。
另外,阿里雲代理了很多公共maven倉庫https://maven.aliyun.com/mvn/view,比如:
倉庫名稱 | 代理源地址 | 使用地址 |
---|---|---|
central | https://repo1.maven.org/maven2/ | https://maven.aliyun.com/repository/central 或 https://maven.aliyun.com/nexus/content/repositories/central |
jcenter | http://jcenter.bintray.com/ | https://maven.aliyun.com/repository/jcenter 或 https://maven.aliyun.com/nexus/content/repositories/jcenter |
public | central倉和jcenter倉的聚合倉 | https://maven.aliyun.com/repository/public 或https://maven.aliyun.com/nexus/content/groups/public |
https://maven.google.com/ | https://maven.aliyun.com/repository/google 或 https://maven.aliyun.com/nexus/content/repositories/google | |
gradle-plugin | https://plugins.gradle.org/m2/ | https://maven.aliyun.com/repository/gradle-plugin 或 https://maven.aliyun.com/nexus/content/repositories/gradle-plugin |
補充更新:
今天克隆了一個項目,同步時顯示如下錯誤:
* What went wrong:
A problem occurred configuring root project 'zxing-android-embedded'.
> Could not resolve all files for configuration ':classpath'.
> Could not find shared.jar (com.android.tools.analytics-library:shared:26.0.1).
Searched in the following locations:
https://maven.aliyun.com/repository/google/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1.jar
這個地址是可以下載到jar的,但是顯示could not find shared.jar,不得其解,可能是阿里雲google倉庫對此依賴包的管理問題。嘗試不從阿里雲google倉庫下載,將阿里雲google倉庫和阿里雲jcenter倉庫換下順序,優先從阿里雲jcenter中下載該依賴,然後發現不報錯了!!!
// 編譯腳本依賴配置
gradle.projectsLoaded {
rootProject.buildscript {
repositories {
// 依此從aliyun jcenter -> aliyun google來尋找依賴
maven { url "https://maven.aliyun.com/repository/jcenter" }
maven { url "https://maven.aliyun.com/repository/google" }
}
}
}