Gradle7.x设置java语言版本
Gradle从6.7版本开始支持一个新特性Toolchain。 默认情况下,Gradle使用相同的Java版本运行Gradle本身以及构建JVM项目,而这个特性除了可以全局设置项目的Java版本以外,还能够分别为不同的Gradle Task设置不同的Java版本。 以下贴一个官方基础示例,这指定构建、运行、测试项目还有生成javadoc都使用JDK11。
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
如果是要单独给不同的Gradle Task设置特别的Java版本,可以这样配置。
tasks.withType(JavaCompile).configureEach {
javaCompiler = javaToolchains.compilerFor {
languageVersion = JavaLanguageVersion.of(8)
}
}
task('testsOn14', type: Test) {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(14)
}
}
默认情况下,Toolchain会自动检测本地Gradle user home directory(此路径可自定义多个,下面再说)以及JDK版本管理工具(包管理器)是否有指定的JDK版本可用。
具体支持以下几个JDK版本管理工具(包管理器),这里引用官方文档说明。
Supported Package Managers:
我没有使用过这三个包管理器,猜测大概是可以查询这些包管理器已安装的JDK列表。
如果本地没有从Gradle user home directory以及JDK版本管理工具(包管理器)中自动检测到指定的JDK版本,还能够从网络上下载JDK,默认下载的是AdoptOpenJDK,以下示例的vendor就是声明使用哪个供应商的JDK。
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
vendor = JvmVendorSpec.ADOPTOPENJDK
}
}
查看JvmVendorSpec源码,有以下JDK供应商可以使用。
public static final JvmVendorSpec ADOPTOPENJDK;
public static final JvmVendorSpec AMAZON;
public static final JvmVendorSpec APPLE;
public static final JvmVendorSpec AZUL;
public static final JvmVendorSpec BELLSOFT;
@Incubating
public static final JvmVendorSpec GRAAL_VM;
public static final JvmVendorSpec HEWLETT_PACKARD;
public static final JvmVendorSpec IBM;
public static final JvmVendorSpec ORACLE;
public static final JvmVendorSpec SAP;
从供应商自动下载JDK到Gradle user home directory,如果是Windows系统,那就是会存放在
echo %GRADLE_USER_HOME%\.jdks
//output E:\.gradle\.jdks
上面说过这个自动检测的默认JDK安装路径是可以自定义,并且能够配置多个,方法就是在项目根目录的gradle.properties配置文件,增加以下配置:
org.gradle.java.installations.paths=/custom/path/jdk1.8,/shared/jre11
如果是多个路径需要使用”,”隔开。 如果想知道自动检测本地有哪些JDK版本,可通过gradle -q javaToolchains进行查询。 我是Windows系统,要使用gradlew,有以下输出结果:
>gradlew -q javaToolchains
+ Options
| Auto-detection: Enabled
| Auto-download: Enabled
+ AdoptOpenJDK 1.8.0_292-b10
| Location: E:\.gradle\jdks\jdk8u292-b10
| Language Version: 8
| Vendor: AdoptOpenJDK
| Is JDK: true
| Detected by: Auto-provisioned by Gradle
+ AdoptOpenJDK 11.0.10+9
| Location: E:\.jdks\adopt-openjdk-11.0.10
| Language Version: 11
| Vendor: AdoptOpenJDK
| Is JDK: true
| Detected by: Current JVM
至此,常用的功能就说完了,如果想知道更多用法,请自行查看官方文档。