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

时间:2014-05-28 21:30:51

标签: 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", "file3"
}

这有效,但我不想在outputs.filesargs中复制文件名。

我已尝试在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]有效,但比输入文件名更难看

1 个答案:

答案 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))也应该有效。