java - Kotlin Gradle 插件:如何访问 `Project` 扩展,例如`sourceSets`?
问题描述
在常规构建脚本中,您可以轻松地使用扩展,Project
例如:Project.sourceSets
build.gradle.kts
sourceSets {
main {
...
}
}
但是当我在我的buildSrc
模块中开发 Gradle 插件时,我无法访问这些。例如:
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.*
class ExamplePlugin : Plugin<Project> {
override fun apply(target: Project) {
target.sourceSets { // error because `sourceSets` can't be resolved.
}
}
}
尽管将kotlin-gradle-plugin
模块包含在我的buildSrc
依赖项中,但仍会发生这种情况:
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31")
}
那么,如何从我的 Gradle 插件中访问这些扩展?
解决方案
class ExamplePlugin : Plugin<Project> {
override fun apply(target: Project) {
target.configure<JavaPluginExtension> {
sourceSets {
println(names)
}
}
}
}
在此处查看附加说明:https ://docs.gradle.org/current/userguide/kotlin_dsl.html#project_extensions_and_conventions
基本上对于插件,或者在不知道所应用插件的其他时间,其他插件添加的扩展的访问器(sourceSets
,configurations
等)将需要通过方法调用来“检索”该范围或对象。在链接的下方还有一个如何获取其他插件创建的任务的示例:
val test by target.tasks.existing(Test::class)
test.configure { useJUnitPlatform() }
// or
val test by target.tasks.existing(Test::class) {
useJUnitPlatform()
}
请注意,如果项目中不存在“sourceSet”对象(因为未应用 java 插件),则会抛出异常。使用 gradle 7.2 版、kotlin-dsl 2.1.6 版测试
推荐阅读
- stata - Stata:标签连续变量
- ibm-cloud - Watson Natural Language Classifier:一个分类器可以提供多少个示例短语
- python - 如何比较列表中子列表之间具有相同索引位置的值?
- html - flex 类不会改变 tailwindcss 中的显示
- shell - 搜索包含两个具有特定扩展名的任意名称文件的目录
- google-sheets - 谷歌表,两表依赖条件格式
- python - 遍历数据帧并计数的 for 循环
- python - 是否有任何直接的方法可以将部分复制文本(使用 python 代码)更改为 Jupyter 笔记本中的 Markdown 和代码单元
- python - 如何解决 Twitter 搜索 API 2.0 上的操作员错误
- java - 意外的 Collections.sort 行为测试失败