Gradle
另外一个常用的 Java 项目管理工具就是 Gradle,比如笔者常用的 Android Studio 就是使用 Gradle 作为 APK 的编译工具。
更准确地说是使用 gradle 的封装脚本 gradlew
,其中包含了具体的 gradle 版本,避免不同版本之间的编译脚本兼容性问题。作为国内用户,经常就死在了 gradlew 的第一步,因为其会去下载对应版本的 grandle-bin,比如 https://services.gradle.org/distributions/gradle-8.0-bin.zip
。
解决方法是修改 gradle/wrapper/gradle-wrapper.properties
文件指定 distributionUrl
为国内镜像源的具体地址,例如:
prop
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://mirror.nju.edu.cn/gradle/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
其他的 gralde distribution 镜像地址可以参考:
解决完 gradle-bin 的下载问题后,还会遇到与 maven 类似的中央仓库下载网络问题,但是 gradle 没有类似 maven 的 mirror
tag,而只有类似的 repositories
tag,用指定私有仓库的方式将其指定到国内的 maven 仓库镜像中。
使用 Groovy DSL 的 gradle 配置文件 build.gradle
可以添加以下配置:
groovy
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
mavenLocal()
mavenCentral()
}
}
使用 Kotlin 的 gradle 配置文件 build.gradle.kts
可以使用下述配置:
kotlin
repositories {
maven { setUrl("https://maven.aliyun.com/repository/google/") }
maven { setUrl("https://maven.aliyun.com/repository/public/") }
mavenLocal()
mavenCentral()
}
Gradle 似乎没有全局的配置方案,网上的教程更多是使用 init.gradle
即初始化脚本,在项目的 gradle 脚本任务执行之前替换掉 repo 地址:
groovy
allprojects{
repositories {
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "remove ${repo.url}"
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "remove ${repo.url}"
remove repo
}
}
}
maven {
url 'https://maven.aliyun.com/repository/public/'
}
}
}
这种方式着实不太优雅,但也能算是一种不修改原始代码工程文件的镜像方案。
值得一提的是,云厂商的 maven 仓库镜像也只有一部分 repository,像 jitpack.io 这类仓库可能镜像中就无法找到,此时只能另觅他法了。
说句题外话,不管是 maven 还是 gradle,其实本质上都是一个 Java 工具,因此我们可以通过给 Java 应用添加属性的方式设置代理。比如 maven/gradle 可以通过 -D
添加属性;gradle 可以通过在 gradle.properties
中添加属性 (需要添加前缀,如: systemProp.https.proxyHost
)。其中 gradle.properties
除了放在项目根目录中,还可以全局使用,在 NIX 系统中路径是 $HOME/.gradle/gradle.properties
,Windows 中则是 %userprofile%.gradle\gradle.properties
。
参考: