如何将gradle文件集合传递给exec?

如何将gradle文件集合传递给exec?,gradle,Gradle,如何将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",

如何将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

  • 输出.files.getFiles().toArray()
    但它获取一个对象[],并传递
    [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,”)
    gets
    file1 file2 file3
    但它仍然作为一个参数传递,而不是作为三个参数传递

  • outputs.files.singleFile
    抛出,因为有多个文件(它适用于输入,因为只有一个输入文件)

  • outputs.files.getFiles().toArray()[0],outputs.files.getFiles().toArray()[1],outputs.files.getFiles().toArray()[2]
    可以工作,但比仅仅输入文件名更难看

请注意:

  • FileCollection
    is-a
    java.util.Collection
  • 有一个
    Exec#args
    重载,它接受一个
    Iterable
    (请参阅中的
    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)
)也应该可以工作。

使用多个args也可以。
*outputs.files
会出现语法错误,而
outputs*.files
会将“[task':acct'output files]”传递给Perl脚本。可能需要是
*(outputs.files)
输出*.files
是作业的错误工具。