常见maven repo在gradle里的配置优化

2,880 阅读1分钟

在项目根目录下的build.gralde里一般有项目的整体maven repo配置,例如

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        //since gradle 4.0
        google()

        //maven { url uri('./repo') }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://dl.google.com/dl/android/maven2/' }
        jcenter { url 'http://jcenter.bintray.com/' }
        maven { url 'http://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        ...
    }
}

allprojects {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://dl.google.com/dl/android/maven2/' }
        jcenter { url 'http://jcenter.bintray.com/' }
        flatDir { dirs rootProject.rootDir.absolutePath + File.separator + 'aars' }
    }
}

其中常用的repo有

jcenter()
mavenCentral()
//since gradle 4.0
google()

这些repo都是国外网站,由于大陆网络原因,下载jar/aar会很慢,幸亏有aliyun maven repo,所以可以全局替换这些repo配置为aliyun

实现方法:把如下配置保存为init.gradle文件,放到$HOME/.gradle/目录下。

allprojects {
    repositories {
        def ALIYUN_REPO = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            if (repo instanceof MavenArtifactRepository) {
                def repoUrl = url
                if (url instanceof java.net.URI) {
                    repoUrl = url.toString()
                }
                if (repoUrl.startsWith('https://repo1.maven.org/maven2')
                        || repoUrl.startsWith('http://repo1.maven.org/maven2')
                        || repoUrl.startsWith('https://jcenter.bintray.com/')
                        || repoUrl.startsWith('http://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repoUrl} replaced by ${ALIYUN_REPO}"
                    remove repo
                }
            }
        }
        maven {
            url ALIYUN_REPO
        }
    }
}

有些dns解析会把google()这个repo解析到国外,导致下载不了,其实它等价于maven { url 'https://dl.google.com/dl/android/maven2/' },当然可以用上面的方法替换,但dl.google.com同时也是studio里更新android sdk的地址,所以更好的方法是修改hosts文件,添加下面两行:

# android studio
203.208.39.238   dl.google.com

hosts文件的位置:

  1. Windows 为 C:\Windows\System32\drivers\etc
  2. Unix/Linux 为 /etc

然后就可以正常编译了。