gradle - 在我的buildSrc文件夹中的自定义任务中:如何确定调用该子项目的文件路径?

标签 gradle kotlin gradle-kotlin-dsl

如果我在buildSrc中定义了一个自定义gradle任务:如何找到调用该任务的项目的相对路径?

在我的buildSrc文件夹中,我有一个自定义任务,该任务创建我的message.properties文件的Enum:

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,这确实可以工作。
但是,如果我从项目运行相同的命令,则代码将在根目录中搜索src文件夹。

最佳答案

嗯,答案很简单:DefaultTask继承自AbstractTask,它引用了在其中调用任务的项目(getProject)

这很好用:

open var targetFolder: String = this.project.file("src/main/resources").absolutePath

关于gradle - 在我的buildSrc文件夹中的自定义任务中:如何确定调用该子项目的文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54691045/

相关文章:

android-studio - Android Studio构建错误:此版本的Android Studio与所使用的Gradle插件不兼容。尝试禁用即时运行

scala - Zeppelin:运行笔记本时出错

kotlin - 无法在 Desktop 中为 Compose 设计 UI 布局

android - 我的 RecyclerView 没有得到适当的通知

ant - Gradle Ant 无法添加任务 ':myproject:test',因为该名称的任务已存在

java - 如何为 java SDK 客户端项目同时支持 maven 和 gradle

android - 如何在 Kotlin 中将以下 Observables 合并为一个?

android - 无效的LOC header (错误的签名)

kotlin - Gradle 6+ : compile groovy before kotlin

Gradle includeBuild vs 实现项目