为Gradle设置镜像,解决jcenter依赖无法下载或者下载过慢问题

2,292 阅读1分钟

来自简书的备份

前言

这其实是一个烂大街的教程了。百度上一堆解决方案,好用的没几个。所以决定温习一下,因为最近写了几个Flutter插件,有很人多表示无法下载Android依赖,于是乎又是翻墙又是如何如何。其实gradle依赖是不需要翻墙的,不过下载速度很不美妙,加之一些网络状况也不是太好,所以需要使用国内镜像来解决这个问题。当然了,使用国内镜像也可能会有弊端,如更新不及时,但是确实可以解决问题。

简单玩法

简单玩法其实就是直接修改项目根目录的build.gradle就好:

allprojects {
    repositories {
        google()
        jcenter()
       // maven库
       def cn = "http://maven.aliyun.com/nexus/content/groups/public/"
       def abroad = "http://central.maven.org/maven2/"
       // 先从url中下载jar若没有找到,则在artifactUrls中寻找
       maven {
         url cn
         artifactUrls abroad
       }
    }
}

高级玩法

如果每个项目都配置一遍可能略显麻烦,所以我们可以为初gradle写一个初始化脚本。 在*~/.gradle/目录下新建一个init.gradle*文件(Windows默认是C:\Users\UserName\.gradle),并录入以下内容:

allprojects{
    repositories {
        google()
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        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
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_JCENTER_URL }
        
    }
}

当然了,也可以将这段脚本放在项目根目录下的build.gradle中。 以上,再次build时候就会飞一样。