如何将FileCollection的元素传递给Exec?
我有这个任务从另一个任务获取输入并调用Perl脚本来生成三个输出文件。
task acct(type: Exec) {
inputs.files getAcct
outputs.files "file1", "file2", "file3"
executable "perl"
args "makeAcct.pl", inputs.files.singleFile, "file1", "file2", "file3"
}
这有效,但我不想在outputs.files
和args
中复制文件名。
我已尝试在args
outputs.files.getFiles().toArray()
但是获得了一个Object []并传递了[Ljava.lang.Object;@340bccc9
outputs.files.asType(Object[])
获取文件[]并传递[Ljava.io.File;@6280a9b8
outputs.files.getFiles()
获取一个集合并传递[file1, file2, file3]
outputs.files.getAsPath()
获取一个字符串并传递file1:file2:file3
outputs.files.getAsPath().replaceAll(File.pathSeparator, " ")
获取file1 file2 file3
但仍然作为一个参数传递,而不是作为三个参数传递
outputs.files.singleFile
抛出因为有多个文件(它适用于输入,因为只有一个输入文件)
outputs.files.getFiles().toArray()[0], outputs.files.getFiles().toArray()[1], outputs.files.getFiles().toArray()[2]
有效,但比输入文件名更难看
答案 0 :(得分:1)
请注意:
FileCollection
是一个java.util.Collection
。Exec#args
重载需要Iterable
(请参阅Gradle Build Language Reference中的Exec
)。这给出了:
task acct(type: Exec) {
inputs.files getAcct
outputs.files "file1", "file2", "file3"
executable "perl"
args "makeAcct.pl"
args inputs.files
args outputs.files
}
或者,传播集合(args "makeAcct.pl", *(inputs.files), *(outputs.files)
)也应该有效。