如何根据目录内容创建一个排除某些目录的ant文件集?
我使用ant来创建一个分发jar,它将每个本地化都放在不同的目录中,其中一些是不完整的,不应该被释放。
我想在目录中添加一些内容(例如名为incomplete.flag
的文件),以便ant排除目录。然后我可以在翻译完成后删除该文件,并将其包含在构建中,而无需修改build.xml。
鉴于此目录结构:
proj
+ locale
+ de-DE
+ en-US
+ fr-FR
此文件集排除了所有incompelte.flag
个文件,但如何排除包含的整个目录?
<fileset dir="${basedir}">
<include name="locale/"/>
<exclude name="locale/*/incomplete.flag">
</fileset>
如果需要,我可以写一个ant任务,但我希望fileset
可以处理这个用例。
答案 0 :(得分:57)
以下方法对我有用:
<exclude name="**/dir_name_to_exclude/**" />
答案 1 :(得分:17)
您需要在目录名称
之后添加'/'<exclude name="WEB-INF/" />
答案 2 :(得分:7)
这是一个替代方案,而不是向您要排除的每个目录添加incomplete.flag
文件,生成一个文件,其中包含您要排除的所有目录的列表,然后使用excludesfile
属性。像这样:
<fileset dir="${basedir}" excludesfile="FileWithExcludedDirs.properties">
<include name="locale/"/>
<exclude name="locale/*/incomplete.flag">
</fileset>
希望它有所帮助。
答案 3 :(得分:5)
Ant文档中实际上存在此类问题的示例。它利用了 选择器(如上所述)和映射器。请参阅http://ant.apache.org/manual/Types/dirset.html中的最后一个示例:
<dirset id="dirset" dir="${workingdir}">
<present targetdir="${workingdir}">
<mapper type="glob" from="*" to="*/${markerfile}" />
</present>
</dirset>
选择${workingdir}
下包含${markerfile}
。
答案 4 :(得分:2)
用户mgaert提供的答案适合我。我认为它应该被标记为正确的答案。
它也适用于复杂的选择器,例如:
<!--
selects only direct subdirectories of ${targetdir} if they have a
sub-subdirectory named either sub1 or sub2
-->
<dirset dir="${targetdir}" >
<and>
<depth max="0"/>
<or>
<present targetdir="${targetdir}">
<globmapper from="*" to="*/sub1" />
</present>
<present targetdir="${targetdir}">
<globmapper from="*" to="*/sub2" />
</present>
</or>
</and>
</dirset>
因此,拥有如下目录结构:
targetdir
├── bar
│ └── sub3
├── baz
│ └── sub1
├── foo
│ └── sub2
├── phoo
│ ├── sub1
│ └── sub2
└── qux
└── xyzzy
└── sub1
以上dirset仅包含
baz foo phoo(
bar
因为sub3而不匹配,而xyzzy
不匹配,因为它不是{{的直接子目录1}})
答案 5 :(得分:0)
通过使用“**”模式可以实现以下目的。
<exclude name="maindir/**/incomplete.flag"/>
上面的'exclude'将完全排除包含incomplete.flag文件的所有目录。
答案 6 :(得分:0)
它适用于我的jar目标:
<jar jarfile="${server.jar}" basedir="${classes.dir}" excludes="**/client/">
<manifest>
<attribute name="Main-Class" value="${mainServer.class}" />
</manifest>
</jar>
此代码包含“classes.dir”中的所有文件,但从jar中排除目录“client”。
答案 7 :(得分:0)
适合我:
<target name="build2-jar" depends="compile" >
<jar destfile="./myJjar.jar">
<fileset dir="./WebContent/WEB-INF/lib" includes="hibernate*.jar,mysql*.jar" />
<fileset dir="./WebContent/WEB-INF/classes" excludes="**/controlador/*.class,**/form/*.class,**/orm/*.class,**/reporting/*.class,**/org/w3/xmldsig/*.class"/>
</jar>