如何将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[])
获取File []并传递[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]
可以工作,但比仅输入文件名最佳答案
注意:
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)
)也应该起作用。关于gradle - 如何将gradle文件集合传递给exec?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23922208/