如何排除已包含在Ant文件集中的目录?

如何排除已包含在Ant文件集中的目录?,ant,fileset,Ant,Fileset,我正在ant中使用jar任务,希望排除某个目录。目录的结构类似于: food |_ fruits |_ apples |_ bananas (已经做了一些通用和简化) 我有一个蚂蚁任务,像这样: <jar destfile="Dest.jar"> ... <fileset dir="food"> <exclude name="**/bananas/" /> <excl

我正在ant中使用
jar
任务,希望排除某个目录。目录的结构类似于:

food
 |_ fruits
     |_ apples
     |_ bananas
(已经做了一些通用和简化)

我有一个蚂蚁任务,像这样:

<jar destfile="Dest.jar">
    ...
    <fileset dir="food">
            <exclude name="**/bananas/" />
            <exclude name="**/*Test*" />
            <include name="**/*.class" />
    </fileset>
    ...

...
...
我想做的是:

  • 包括以“.class”结尾的所有文件(此功能)
  • 排除文件名中包含“Test”的所有文件(此选项有效)
  • 排除名为“香蕉”的整个目录(这不起作用
我尝试了几种通配符组合,试图排除香蕉目录,但没有效果。我也尝试过对include和excludes进行重新排序,但我不知道这是否会产生影响。我还尝试了一些其他的建议[1][2],但没有奏效。我目前的猜测是,在香蕉目录中,有与“*.class”匹配的文件,所以我认为它们的包含可以防止香蕉被排除

注意:我精确地匹配了香蕉目录的真实名称,所以区分大小写应该不是问题。如果它能使任务更简单,我可以引用目录的完整路径,尽管我更希望在ant任务中更易于重构

如何排除已包含在ant文件集中的目录?


[1]

[2]

我已经发现了问题的原因,这与ant任务的编写方式无关

这个问题似乎与文件集includes和excludes无关,更多的是与jar文件是否真正被创建有关。重复运行任务,并且始终使用相同的jar目标,似乎创建的jar文件并没有替换现有的jar(正如我假设的那样)。删除jar并重新运行ant任务产生了我预期的结果


我不知道我是否应该为假设文件将被替换而感到愚蠢,或者我是否有权利因为没有关于它的日志消息而感到委屈,欢迎评论。总之,问题解决了。

什么版本的Ant,什么平台?我尝试在Windows XP上用Ant 1.8.1重新创建您的示例,它似乎可以按照您的要求工作。在Eclipse中运行1.7.1版。我将尝试1.8.1,看看这是否有区别:)@Anders:请看我的答案,您对include/excludes工作的看法完全正确,并且您提示我在ant任务本身之外寻找答案:-)奇怪的是,我也会期待一条日志消息。出于好奇,您是否使用-verbose标志()运行ant?当我陷入构建脚本的困境时,它总是帮助我解决问题。