如何排除已经包含在Ant FileSet中的目录?

问题描述:

我在ant中使用jar任务,希望排除某个目录。该目录的结构是这样的:如何排除已经包含在Ant FileSet中的目录?

food 
|_ fruits 
    |_ apples 
    |_ bananas 

(已作出通用和简化一点)

而且我有一个Ant任务是这样的:

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

我试图要做的是:

  • 包括以“.class”结尾的所有文件(此作品)
  • 排除其中有“测试”在其文件名中的所有文件(这工作)
  • 排除“香蕉”命名整个目录(这不起作用

我已经试过的几种组合尝试排除香蕉目录中的通配符,无济于事。我也尝试重新排序包含和排除,但我不知道这是否有所作为。我也尝试了一些没有完成这项工作的其他建议[1] [2]。我现在疯狂的猜测是,在香蕉目录中有与“* .class”相匹配的文件,所以我认为他们的包容是阻止香蕉被排除在外。

注意:我完全匹配香蕉目录的真实名称,因此区分大小写不应该成为问题。如果它可以使任务更简单,我可以引用目录的完整路径,尽管我更喜欢在ant任务中对重构更友好一些。

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


[1] http://www.velocityreviews.com/forums/t146608-in-ant-how-do-you-exclude-a-directory-from-copy-or-zip.html
[2] http://www.java2s.com/Tutorial/Java/0520__Ant/filesetwithexclude.htm

+0

什么版本的Ant,以及什么平台?我尝试在Windows XP上用Ant 1.8.1重新创建您的示例,并且它看起来可以按您的需要工作。 – 2010-07-18 21:52:48

+0

在Eclipse中运行版本1.7.1。我会尝试1.8.1,看看这是否有所作为:) – Grundlefleck 2010-07-18 22:04:18

+0

@Anders:请看我的回答,你对包含/排除工作是绝对正确的,并且你促使我寻找一个与蚁本身无关的答案:-) – Grundlefleck 2010-07-18 22:16:22

我发现了问题的原因,这是没有任何关系的Ant任务是如何写的。

这个问题似乎与文件集中包含和排除无关,更多与jar文件是否实际创建有关。反复运行任务并始终使用jar的相同目标,看起来创建的jar文件并不能取代现有的jar(就像我以前所认为的那样)。删除jar并重新运行ant任务产生了我期望的结果。

我不知道我是否应该因为假设文件被替换而感到愚蠢,或者如果我正确地感到受到委屈,没有关于它的日志消息,欢迎评论。 Anyhoo,问题解决了。

+2

奇怪的是,我本来也希望有一条日志消息。出于好奇,你是否在使用-verbose标志运行ant(http://ant.apache.org/problems。HTML#检查%20Debug%20Output)?当我遇到构建脚本时,它总是帮助我。 – Pat 2010-07-19 02:13:01