【发布时间】:2021-08-31 04:21:10
【问题描述】:
根据“Toolchains for plugin authors”,应该可以从自定义任务中访问配置的JavaToolchainSpec。我尝试在自定义插件中使用这种方法,该插件根据JavaPlugin 的存在创建任务并查询配置的languageVersion 属性。这是一个最小的例子。
build.gradle
plugins {
id 'application'
id 'com.example.myplugin'
}
...
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
MyPlugin.kt
class MyPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.plugins.withType<JavaPlugin> {
target.tasks.create<MyTask>("mytask")
}
}
}
MyTask.kt
abstract class MyTask : DefaultTask() {
init {
val extension = project.extensions.getByType<JavaPluginExtension>();
val languageVersion = extension.toolchain.languageVersion.get();
...
}
}
一旦 Gradle 创建 MyTask 并查询 languageVersion 属性,构建将失败并出现以下错误。
Cannot query the value of property 'languageVersion' because it has no value available.
我的猜测是我访问扩展程序太早了,并且此时它还没有设置它的值。我现在的问题是,是否有办法将配置的属性(最好使用惰性机制)与任务联系起来。
【问题讨论】:
标签: kotlin gradle plugins configuration toolchain