Gradle: как запустить задачу для указанных входных файлов? - PullRequest
0 голосов
/ 31 января 2020

У меня есть файл сборки Gradle, который использует плагин ProtoBuffer и выполняет некоторые задачи. В какой-то момент некоторые задачи выполняются для некоторых файлов, которые являются входными данными для задач.

Я хочу изменить набор файлов, которые являются входными данными для этих задач. Скажем, я хочу, чтобы задачи выполнялись с файлами, перечисленными по одному в строке в определенном файле. Как я могу это сделать?

РЕДАКТИРОВАТЬ: Вот часть довольно большого build.gradle, который обеспечивает некоторый контекст.

configure(protobufProjects) {
    apply plugin: 'java'

    ext {
        protobufVersion = '3.9.1'
    }

    dependencies {
        ...
    }

    protobuf {
        generatedFilesBaseDir = "$projectDir/gen"

        protoc {
            if (project.hasProperty('protocPath')) {
                path = "$protocPath"
            }
            else {
                artifact = "com.google.protobuf:protoc:$protobufVersion"
            }
        }

        plugins {
            ...
        }

        generateProtoTasks {
            all().each { task ->
                ...
            }
        }

        sourceSets {
            main {
                java {
                    srcDirs 'gen/main/java'
                }
            }
        }
    }

    clean {
        delete protobuf.generatedFilesBaseDir
    }

    compileJava {
        File generatedSourceDir = project.file("gen")
        project.mkdir(generatedSourceDir)
        options.annotationProcessorGeneratedSourcesDirectory = generatedSourceDir
    }
}

Вопрос в том, как изменить набор входных файлов для существующая задача (которая уже что-то делает с ними), а не как создать новую задачу.

РЕДАКТИРОВАТЬ 2: Согласно Как изменить список файлов в задаче копирования Gradle? В общем, это плохая идея, так как Gradle делает предположения о зависимостях входов и выходов, которые могут быть нарушены этим подходом.

1 Ответ

0 голосов
/ 31 января 2020

Если бы вы добавили файл Gradle и уточнили c, это было бы очень полезно. Я попытаюсь привести пример из того, что я понял:

fun listFiles(fileName: String): List<String> {
    val file = file(fileName).absoluteFile
    val listOfFiles = mutableListOf<String>()
    file.readLines().forEach {
        listOfFiles.add(it)
    }
    return listOfFiles
}

tasks.register("readFiles") {
    val inputFile: String by project
    val listOfFiles = listFiles(inputFile)
    listOfFiles.forEach {
        val file = file(it).absoluteFile
        file.readLines().forEach { println(it) }
    }
}

Затем запустите gradle следующим образом: gradle -PinputFile=<path_to_the_file_that_contains_list_of_files> readFiles

...