Ant concat任务抱怨丢失的文件

时间:2011-01-05 15:41:25

标签: ant concatenation

<concat destfile="dist/external.js">
  <fileset dir=".">
    <include name="a.js" />
    <include name="b.js" />
  </fileset>
</concat>

如果缺少a或b,这不会失败。我尝试过设置optional =“false”或asis =“true”,并且总是抱怨这些属性不存在。

1 个答案:

答案 0 :(得分:2)

如果您只想在文件丢失时看到'concat'任务发出警告,您可以使用filelist resource collection代替'fileset':

<concat destfile="dist/external.js">
  <filelist dir=".">
    <file name="a.js" />
    <file name="b.js" />
  </filelist>
</concat>

b.js不存在时,会显示消息:

[concat] /Path/.../b.js does not exist.

但无论如何都要进行,这可能不是你想要的。

检查资源集合中所有文件是否存在的一种方法如下。请注意,您需要将“antlib:org.apache.tools.ant.types.resources.selectors”命名空间添加到项目中,以使用下面显示的resource selectors。 (这对于早于1.7.0的Ant版本不起作用。)使用Ant fail task检查没有资源丢失。

<project name="stack_overflow"
         xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">

<filelist id="my.js.files" dir=".">
    <file name="a.js" />
    <file name="b.js" />
</filelist>

<restrict id="missing.js.files">
  <filelist refid="my.js.files"/>
  <rsel:not>
    <rsel:exists/>
  </rsel:not>
</restrict>

<property name="missing.files" refid="missing.js.files" />
<fail message="These files are missing: ${missing.files}">
  <condition>
    <length string="${missing.files}" when="greater" length="0" />
  </condition>
</fail>
<concat destfile="dist/external.js">
    <filelist refid="my.js.files" />
</concat>

</project>

运行时,如前所述b.js丢失,这会导致“concat”任务之前的构建失败:

BUILD FAILED
/Path/.../build.xml:17: These files are missing: /Path/.../b.js