如果我在buildSrc中定义了一个自定义gradle任务:如何找到调用该任务的项目的相对路径?
在我的buildSrc文件夹中,我有一个自定义任务,该任务创建了我的message.properties文件的枚举:
open class GenerateEnumTask : DefaultTask() {
@get:Input
open var inputFolder: String = "src/main/resources"
@get:Input
open val targetFilePath: String = "src/generated/kotlin/MessageCode.kt"
@get:OutputFile
val enumFile = File(targetFilePath)
@TaskAction
fun generateEnum() {
...
}
@Internal
override fun getDescription() = "This task uses downloaded property files and creates an enum kotlin file"
}
然后,我想确保在代码编译之前已生成枚举。 因此,将其放在需要枚举的子项目“核心”中。
build.gradle.kts:
tasks {
val generateEnumTask by registering(GenerateEnumTask::class)
withType<KotlinCompile> {
kotlinOptions.jvmTarget = Versions.jvmTarget
dependsOn(generateEnumTask)
dependsOn(formatKotlin)
doFirst{
println("compile kotlin in core project")
}
}
}
如果我直接从核心项目的子文件夹运行gradle compileKotlin
,这确实可以工作。
但是,如果我从 root 项目运行相同的命令,则代码将在根目录中搜索src文件夹。
答案 0 :(得分:1)
嗯,答案很简单:DefaultTask继承自AbstractTask,它引用了在(getProject)中调用该任务的项目。
这很好用:
open var targetFolder: String = this.project.file("src/main/resources").absolutePath