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