我有一个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:根据How do I modify a list of files in a Gradle copy task?讲,这通常是个坏主意,因为Gradle对输入和输出依存关系进行了假设,而这种方法可以打破这种假设。
答案 0 :(得分:0)
如果您要添加gradle文件,并且更具体一点,那将非常有帮助。我将尝试根据我的理解给出一个例子:
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