处理多个文件的 Ant exec 命令参数

Ant exec command argument dealing with multiple files

我正在使用 ant exec 命令来实现 less 实用程序来查看一堆 .java 文件的源代码。 (我知道还有其他方法可以做到这一点,比如使用 concat

因此,如果我只指定一个文件,调用 ant view 就可以工作:

<target name="view">
    <exec executable="less" dir=".">
        <arg value="Main.java"/>
    </exec>
</target>

但是如果我将代码更改为 <arg value="*.java"/> 以查看所有文件,它实际上会搜索名为 *.java.

的文件

显然我可以为每个文件放一堆 arg,但是有没有办法用一个 arg 来做到这一点?

您可以使用 foreach,这需要 ant-contrib

<target name="view">
  <foreach target="call-less" param="file">
    <fileset dir="${src}" includes="**/*.java" />
  </foreach>
</target>

<target name="call-less">
    <exec executable="less">
        <arg value="${file}" />
    </exec>
</target>

* glob 在 Unix-likes 上被 shell 扩展,这就是 less 不自己做的原因。

除了 <exec> 之外还有 <apply> 用于资源集合:

<apply executable="less" dir="." parallel="true" relative="true">
  <fileset dir="." includes="*.java"/>
</apply>