580 字
3 分钟
在国内如何更优雅的使用Gradle

在国内如何更优雅的使用Gradle#

gradle wrapper下载缓慢#

虽然gradle现在也有cdn了,但有时候难免遇到下载gradle-8.12-all.zip或者gradle-8.12-bin.zip下载不动的情况。这个时候一般都会打开代理软件去解决,但还有一个不用开代理的方式来解决这个问题修改gradle/wrapper/gradle-wrapper.properties这个文件中distributionUrl的路解决如下。保留gradle-8.12-all.zip将前面的url替换为https://mirrors.cloud.tencent.com/gradle

distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.12-all.zip

gradle依赖下载缓慢#

一般来说我们都会配置阿里或者腾讯的maven镜像仓库,但是gradle的某些依赖可能不会走我们配置的镜像,这个时候就可以选择在settings.gradle.kts中添加一段url全局映射的代码如下。

// 映射的map
val urlMaps = mapOf(
"https://repo.maven.apache.org/maven2" to "https://maven.aliyun.com/repository/public",
"https://repo1.maven.apache.org/maven2" to "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/",
"https://dl.google.com/dl/android/maven2" to "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/",
"https://plugins.gradle.org/m2" to "https://maven.aliyun.com/repository/gradle-plugin"
)
// 遍历所有仓库并替换
fun RepositoryHandler.enableMirror() {
all {
if (this is MavenArtifactRepository) {
val originalUrl = this.url.toString().removeSuffix("/")
urlMaps[originalUrl]?.let {
logger.lifecycle("Repository[$url] is mirrored to $it")
this.setUrl(it)
}
}
}
}
gradle.allprojects {
buildscript {
repositories.enableMirror()
}
repositories.enableMirror()
}
gradle.beforeSettings {
pluginManagement.repositories.enableMirror()
dependencyResolutionManagement.repositories.enableMirror()
}

这个是针对单个项目的,如果要在全部的项目中生效可以将上述代码放入$GRADLE_USER_HOME/init.gradle.kts也就是~/.gradle/init.gradle.kts文件中,然后开始享受吧。

如何全局管理Gradle的依赖#

在gradle项目中如果有多个模块,那么在没有统一管理之前,会在每个模块中配置依赖,难免后面升级依赖的时候把某个模块忘了,导致依赖冲突,也比较难以管理依赖。这个时候就要借助Gralde的dependencyResolutionManagement了。

  1. 先打开settings.gradle.kts文件,然后添加如下代码。
dependencyResolutionManagement {}
  1. 创建versionCatalogs
dependencyResolutionManagement {
versionCatalogs{}
}
  1. 创建gradle plugin的依赖
dependencyResolutionManagement {
versionCatalogs{
create("plugins") {
plugin("spring-boot", "org.springframework.boot").version("3.4.0")
plugin("spring-dependency-management", "io.springdependency-management").version("1.1.6")
plugin("graalvm.buildtools", "org.graalvm.buildtools.native").version("0.10.3")
}
}
}
  1. 创建普通的依赖
dependencyResolutionManagement {
versionCatalogs{
create("spring") {
version("spring-boot", "3.4.0")
library("spring-boot-devtools", "org.springframework.boot", "spring-boot-devtools").versionRef("spring-boot")
}
create("utils") {
library("hutool-all", "cn.hutool", "hutool-all").version("5.8.16")
}
}
}
  1. 使用定义的依赖
plugins {
java
alias(plugins.plugins.spring.boot)
alias(plugins.plugins.spring.dependency.management)
alias(plugins.plugins.graalvm.buildtools)
}
...
dependencies {
implementation(utils.hutool.all)
developmentOnly(spring.spring.boot.devtools)
}

完整的例子看这里HyperLinkStretch,当然这个只是简单的例子,复杂的项目可能需要根据实际情况进行修改。

结语#

看完之后感觉如何,有没觉得gradle比maven好玩,更灵活。编译速度也是gradle更快,kotlin的一些框架也无法支持maven作为构建工具了,身为一个javaer,gradle也是不能不学的。