在普通的構建腳本中,你可以很容易地在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> /span>{
override fun apply(target: Project){
target.sourceSets { //error because `sourceSets` can't be resolved. }
}
}
}
盡管在我的buildSrc依賴中包含了kotlin-gradle-plugin模塊,但還是發生了這種情況:
plugins {
`kotlin-dsl
}
資源庫 {
mavenCentral()
}
依賴性 {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"/span>)
}
那么,我怎樣才能從我的Gradle插件中訪問這些擴展呢?
uj5u.com熱心網友回復:
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版進行測驗
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321075.html
標籤:
上一篇:串列的Java流圖
