如何在自定义Gradle插件中配置Java插件的Toolchain?
问题
我希望在自定义Gradle插件中配置Java插件的Toolchain,按照官方文档的写法,在build.gradle里是这样配置的:
java { toolchain { languageVersion = JavaLanguageVersion.of(17) } }
我已经在自定义插件里通过PluginManager应用了Java插件,并获取到了JavaPluginExtension,但不知道怎么在代码里配置Toolchain。JavaPluginExtension提供了getToolchain()和toolchain(Action)方法,却没找到直接配置JavaToolchainSpec的方式,该怎么解决?
自定义插件的现有代码如下:
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 -> { // 这里该怎么配置toolchain? }); } }
解决方案
你可以通过JavaPluginExtension提供的toolchain(Action<JavaToolchainSpec>)方法来配置Toolchain,这个方法的作用和Groovy DSL里的toolchain {}代码块完全对应。只需要在lambda中对JavaToolchainSpec进行配置即可,具体步骤如下:
- 导入
JavaToolchainSpec和JavaLanguageVersion类; - 在
configure的lambda里调用javaPluginExtension.toolchain()方法,传入一个配置JavaToolchainSpec的Action。
完整的插件代码如下:
package com.clavisit.clientis.web.gradle; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.jvm.toolchain.JavaLanguageVersion; import org.gradle.jvm.toolchain.JavaToolchainSpec; public class BuildPlugin implements Plugin<Project> { @Override public void apply(Project target) { target.getPluginManager().apply("java"); target.getExtensions().configure(JavaPluginExtension.class, javaPluginExtension -> { // 配置Java Toolchain javaPluginExtension.toolchain(toolchainSpec -> { toolchainSpec.setLanguageVersion(JavaLanguageVersion.of(17)); // 还可以配置其他Toolchain参数,比如供应商: // toolchainSpec.getVendor().set(JvmVendorSpec.AZUL); }); }); } }
这样配置后,效果就和在build.gradle里写Groovy DSL的toolchain {}完全一致了。如果需要配置更多Toolchain属性(比如供应商、实现版本等),都可以在toolchainSpec的lambda中调用对应的setter方法完成。
内容的提问来源于stack exchange,提问作者Spike2050
相关产品推荐
相关产品推荐

