【问题标题】:How to exclude a directory which is already included in an Ant FileSet?如何排除已包含在 Ant FileSet 中的目录?
【发布时间】:2011-03-17 16:19:20
【问题描述】:

我在 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”的所有文件(可行)
  • 排除名为“bananas”的整个目录(这不起作用

我尝试了几种通配符组合来尝试排除香蕉目录,但无济于事。我也尝试过重新排序包含和排除,但我不知道这是否会有所不同。我还尝试了其他一些建议[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

【问题讨论】:

  • 什么版本的Ant,什么平台?我尝试在 Windows XP 上使用 Ant 1.8.1 重新创建您的示例,它似乎可以按您的意愿工作。
  • 在 Eclipse 中运行 1.7.1 版。我会尝试 1.8.1 看看是否有什么不同:)
  • @Anders:请看我的回答,你对包含/排除工作的看法是绝对正确的,你提示我在 ant 任务本身之外寻找答案:-)

标签: ant fileset


【解决方案1】:

问题的原因我已经找到了,和ant任务的写法无关。

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

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

【讨论】:

猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2010-09-26
相关资源
最近更新 更多