如何排除已经包含在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
我发现了问题的原因,这是没有任何关系的Ant任务是如何写的。
这个问题似乎与文件集中包含和排除无关,更多与jar文件是否实际创建有关。反复运行任务并始终使用jar的相同目标,看起来创建的jar文件并不能取代现有的jar(就像我以前所认为的那样)。删除jar并重新运行ant任务产生了我期望的结果。
我不知道我是否应该因为假设文件被替换而感到愚蠢,或者如果我正确地感到受到委屈,没有关于它的日志消息,欢迎评论。 Anyhoo,问题解决了。
奇怪的是,我本来也希望有一条日志消息。出于好奇,你是否在使用-verbose标志运行ant(http://ant.apache.org/problems。HTML#检查%20Debug%20Output)?当我遇到构建脚本时,它总是帮助我。 – Pat 2010-07-19 02:13:01
什么版本的Ant,以及什么平台?我尝试在Windows XP上用Ant 1.8.1重新创建您的示例,并且它看起来可以按您的需要工作。 – 2010-07-18 21:52:48
在Eclipse中运行版本1.7.1。我会尝试1.8.1,看看这是否有所作为:) – Grundlefleck 2010-07-18 22:04:18
@Anders:请看我的回答,你对包含/排除工作是绝对正确的,并且你促使我寻找一个与蚁本身无关的答案:-) – Grundlefleck 2010-07-18 22:16:22