В пользовательской задаче в моей папке buildSrc: Как определить путь к файлу подпроекта, в котором он вызывается? - PullRequest
0 голосов
/ 14 февраля 2019

Если я определяю пользовательскую задачу gradle в buildSrc: как узнать относительный путь к проекту, из которого вызывается задача?

В моей папке buildSrc у меня естьпользовательская задача, которая создает файл Enum our of my 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"
}

Затем я хочу убедиться, что перечисление генерируется до компиляции кода.Поэтому я помещаю это в подпроект «ядро», где мне нужен Enum.

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 в корневом каталоге.

1 Ответ

0 голосов
/ 14 февраля 2019

Ах, ответ был прост: DefaultTask наследуется от AbstractTask, в котором есть ссылка на проект, в котором была вызвана задача (getProject)

Это прекрасно работает:

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