如何根据目录内容从ant文件集中排除目录

Cha*_*ick 30 ant fileset

如何根据目录内容创建一个排除某些目录的ant文件集?

我使用ant来创建一个分发jar,它将每个本地化都放在不同的目录中,其中一些是不完整的,不应该被释放.

我想在目录中添加一些东西(例如一个名为的文件incomplete.flag),以便ant排除目录.然后我可以在转换完成后删除该文件,并将其包含在构建中而不修改build.xml.

鉴于此目录结构:

proj
+ locale
  + de-DE
  + en-US
  + fr-FR
Run Code Online (Sandbox Code Playgroud)

此文件集排除所有incompelte.flag文件,但如何排除包含它们的整个目录?

  <fileset dir="${basedir}">
    <include name="locale/"/>
    <exclude name="locale/*/incomplete.flag">
  </fileset>
Run Code Online (Sandbox Code Playgroud)

如果需要,我可以编写一个ant任务,但我希望fileset能处理这个用例.

Sas*_*sha 59

以下方法适用于我:

<exclude name="**/dir_name_to_exclude/**" />
Run Code Online (Sandbox Code Playgroud)

  • 如本答案所示,按目录名排除是微不足道的,并没有解决问题.请仔细阅读,要排除的子目录应该只包含具有特定名称的文件. (10认同)

小智 18

您需要在目录名称后添加"/"

<exclude name="WEB-INF/" />
Run Code Online (Sandbox Code Playgroud)

  • 如本答案所示,按目录名排除是微不足道的,并没有解决问题.请仔细阅读,要排除的子目录应该只包含具有特定名称的文件. (5认同)

Alo*_*nso 7

这是一个替代方案,而不是向incomplete.flag要排除的每个目录添加文件,生成一个文件,其中包含要排除的所有目录的列表,然后使用该excludesfile属性.像这样的东西:

<fileset dir="${basedir}" excludesfile="FileWithExcludedDirs.properties">
  <include name="locale/"/>
  <exclude name="locale/*/incomplete.flag">
</fileset>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


mga*_*ert 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>
Run Code Online (Sandbox Code Playgroud)

选择${workingdir}包含a的所有目录${markerfile}.