Ant:一起使用include和exclude

时间:2011-01-07 19:35:01

标签: ant include fileset

好的,这看起来应该很简单。我正在使用Apache Ant 1.8,我有一个目标:

<delete file="output/program.tar.bz2"/>
<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2">
  <tarfileset dir="input">
    <include name="goodfolder1/**"/>
    <include name="goodfolder2/**"/>
    <exclude name="**/badfile"/>
    <exclude name="**/*.badext"/>
  </tarfileset>
</tar>

我希望它创建一个输入/ goodfolder1和输入/ goodfolder2的.tar.bz2,不包括名为“badfile”的文件,并排除扩展名为“.badext”的文件。它给了我一个.tar.bz2,但它包括badfile和* .badext - 排除似乎被忽略了。

包含/排除的顺序似乎没有什么区别。我尝试将包含/排除包装在一个(文档中说它是隐含的?),但它没有区别。

我确信我有一些简单的东西,因为the manual has a very similar example,{{3}},虽然情况有所不同。

编辑:看起来它可能与dir="input"属性有关:它在“输入”中添加所有内容,然后将tarfileset中的所有内容添加到该内容中。我想要的文件在program.tar.bz2中出现两次,但排除的文件只出现一次。但dir是强制性的,我不知道这与手册中的示例有何不同。

2 个答案:

答案 0 :(得分:2)

啊,<tarfileset>本身就是造成我问题的原因。

如果我将其删除,并将包含/排除直接放在<tar>中,则可以正常使用。

答案 1 :(得分:0)

我认为您需要使用两个<tarfileset>元素。 <include><exclude>元素仅用于文件。不适用于目录。例如:

<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2"> <tarfileset dir="goodfolder1"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> <tarfileset dir="goodfolder2"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> </tar>