从 gradle 插件内部我想配置另一个 gradle 插件。特别是我想像gradle手册中提到的那样设置java工具链
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
我可以使用 PluginManager 访问扩展:
package com.clavisit.clientis.web.gradle;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPluginExtension;
public class BuildPlugin implements Plugin<Project> {
@Override
public void apply(Project target) {
target.getPluginManager().apply("java");
target.getExtensions().configure(JavaPluginExtension.class, javaPluginExtension -> {
// how to configure the toolchain
});
}
}
但是这里如何配置工具链呢?扩展为我提供了一个 getter 和一个 Action 方法,但无法配置 JavaToolChainSpec。
JavaToolchainSpec getToolchain();
JavaToolchainSpec toolchain(Action<? super JavaToolchainSpec> action);
有什么想法吗?
您已经完成了所有艰苦的工作,并展示了如何使用
Action
配置对象。继续使用这些 lambda 函数进行配置:
target.getExtensions().configure(JavaPluginExtension.class, javaPluginExtension -> {
javaPluginExtension.toolchain(toolchain -> {
toolchain.getLanguageVersion().set(JavaLanguageVersion.of(21));
});
});
也许另一个棘手的地方是
getLanguageVersion
返回一个 Property
对象,因此您需要 set
它,而不是像构建脚本中允许的那样进行分配。