也就是说,Gradle 可以使用工具链设置来运行自己吗?
我已经在我的 gradle 构建中配置了一个工具链,并且在缺少时可以很好地下载所需的 JDK。我还需要构建脚本依赖项受到工具链的影响,但这不会发生。
示例:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'some:lib:1.0' // This lib requires Java 17
}
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
在系统上我只有 java 8,所以 Gradle 下载 java 17 来运行应用程序,但尝试获取“some:lib:1.0”的 java 8 库,并使用 17 进行编译,结果失败,并出现类似的内容
未找到 some:lib:1.0 的匹配变体。消费者是 配置为查找运行时使用的库,兼容 Java 8,打包为 jar
您正在谈论目前正在孵化的 Daemon JVM 功能。
执行
./gradlew updateDaemonJvm --jvm-version=17
让gradle生成必要的属性文件并提交更改。这将使用与工具链相同的发现功能,使用配置的 Java 版本执行 Gradle Build 本身。
但是:
守护进程 JVM 发现过程不支持自动配置新的 JVM 安装。这将在未来的版本中添加。