這個自定義插件存在于 gradle 中buildSrc/:
abstract class MyTask : DefaultTask() {
@get:Input
abstract val buildDir: Property<String>
@TaskAction
fun someTask() {
// do stuff
}
}
class DevelopmentPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.tasks.run {
register("myTask", MyTask::class.java) {
inputs.property("buildDir", project.buildDir)
println(inputs.getProperties())
}
}
}
}
并通過運行任務,例如$ ./gradlew myTask失敗:
Could not determine the dependencies of task ':myTask'.
> Cannot query the value of task ':myTask' property 'rootDir' because it has no value available.
prinln 輸出也{buildDir=null}意味著inputs.property("buildDir", project.buildDir)失敗。
如何project.buildDir從任務中的插件傳遞值?
project.buildDir由于 Gradle 正在孵化的構建快取功能,直接從任務內部使用是不可接受的答案。
uj5u.com熱心網友回復:
首先,有一個在 Gradle 中不可見的型別別問題。
buildDir 是型別,File而屬性是String.
所以"${project.buildDir}"應該使用。
其次,由于屬性是abstract val它可以在閉包中直接訪問。因此它可以設定為:
// instead of:
inputs.property("buildDir", "${project.buildDir}")
// just this:
buildDir.set("${project.buildDir}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/382359.html
上一篇:在路徑“lib/arm64-v8a/libnode.so”中找到2個檔案-nodejs-mobile-react-native的jniLibs問題
