gradle設置全局優先下載依賴maven倉庫

在由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.gradleUSER_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
google 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" }
		}
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章