全局替换 gradle 仓库地址为阿里仓库

全局替换 gradle 仓库地址为阿里仓库

我们在开发 Android 应用的时候,经常需要下载一些第三方库,但是由于某些原因,很多第三方库要么下载速度慢,要么无法下载。

根本原因就是 gradle 的仓库地址无法访问了,为什么无法访问?不知道。对于这些无法访问的库,我们可以用镜像仓库的方法来解决。阿里仓库就是一个比较好的国内镜像仓库。

一般我们在项目的 build.gradle 文件添下面的代码就可以了。

repositories {

maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }

maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }

maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }

google()

jcenter()

}

上面的代码就会在下载第三方库的时候,优先从阿里的仓库里面找,找到了就下载,找不到(阿里仓库没同步的时候) 的时候就会去下面的 google 的库和 jcenter 库里面找。

但是,如果每个项目都改一遍不是很烦吗?通过查阅资料, gradle 生命周期中有一个初始化( Initialization ) 的过程,这个过程运行在 build script 之前,所以我们可以在这个地方做一点系统全局的设置,比如配置仓库地址。

你可以在以下几个位置实现仓库地址全局配置:

  1. 放一个 init.gradle 文件到 USER_HOME/.gradle/目录下
  2. 放一个后缀是 .gradle 的文件到 USER_HOME/.gradle/init.d/ 目录下
  3. 放一个后缀是 .gradle的文件到 GRADLE_HOME/init.d/ 目录下. 或者直接修改工程中build.gradle 文件中的仓库配置,也能更改仓库地址,只不过只对当前工程有效。

个人使用在 USER_HOME/.gradle/ 下创建 init.gradle 文件 ,配置文件init.gradle如下:

allprojects{

repositories {

def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/central'

def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'

def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'

all { ArtifactRepository repo ->

if(repo instanceof MavenArtifactRepository){

def url = repo.url.toString()

if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."

remove repo

// repo.url = ALIYUN_REPOSITORY_URL

}

if (url.startsWith('http://jcenter.bintray.com')) {

project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."

remove repo

// repo.url = ALIYUN_JCENTER_URL

}

if (url.startsWith('https://maven.google.com')) {

project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."

remove repo

// repo.url = ALIYUN_GOOGLE_URL

}

}

}

maven {

url ALIYUN_REPOSITORY_URL

url ALIYUN_JCENTER_URL

url ALIYUN_GOOGLE_URL

}

}

}

这一段代码表示的,用阿里的仓库替换 google 和 jcenter 仓库。如果不想替换,注释掉 remove repo 就好了

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();