Gradle Repositories 换用阿里云镜像
目录
Gradle 项目(尤其是 Android 项目)经常要从 Google、Maven Central 下载依赖,但是在大陆下载的速度非常之慢(大约 170kB/s),遇到包大一点的依赖只能干等。
以 Android 为例,定义这些下载源的位置在这里:
// build.gradle
allprojects {
// ...
repositories {
// ...
mavenCentral()
google()
}
}
替换成阿里云的依赖就是将这些源替换掉。
直接用代理
如果自己已经有代理,就可以找到或新建 gradle.properties
,填入代理设置。
gradle.properties 可以放在这里:
- 项目根目录 (e.g.
android/gradle.properties
)- Unix 用户目录 (e.g.
~/.gradle/gradle.properties
)- Windows 用户目录 (e.g.
C:\Users\用户名\.gradle\gradle.properties
)
# 假定代理服务器是 127.0.0.1,端口 3128
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=3128
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=3128
检查阿里云的镜像是否仍然存在
先看看阿里云的镜像是否还在。
仅当前项目换成镜像站
// build.gradle
allprojects {
repositories {
// mirror
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public/' }
// mavenCentral()
// google()
}
}
这个方法有个局限性。
这份配置文件 build.gradle
是属于当前项目的,只保证当前项目的依赖从镜像站拉取。
如果依赖包里面的配置文件仍然是从源站拉取的,那么包里面的依赖还是会从源站下载。
全局项目都改成镜像站(推荐)
位置: ~/.gradle/init.gradle
,如果没有就创建一个。
Windows 位置:
C:\Users\<用户名>\.gradle\init.gradle
// 摘自 https://blog.csdn.net/u013066244/article/details/113444036
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin'
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
}
if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
remove repo
}
if (url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
remove repo
}
}
}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}
这个脚本定义了一个钩子,当需要拉取依赖的时候,通过 URL 关键字删掉源站仓库,然后新建镜像站的仓库。
Gradle 每次拉取依赖都会触发这个钩子,最后只能拿到镜像站的仓库。
附录 & 技巧
-
~/.gradle
为缓存的依赖和配置目录,当存储紧张时,可以删掉~/.gradle
里面除了配置(init.gradle等)以外的所有文件以释放空间。 -
gradle.properties
也能配置额外的功能,如限制内存,禁用后台驻留。# 限制最大内存 1600MB org.gradle.jvmargs=-Xmx1600m # 禁用后台驻留,禁用后 Gradle 每次执行完都会释放内存 org.gradle.daemon=false