我正在用Ant建立一个免费和专业的包。
在专业版中,没有一些文件,因为我可以使用自定义PhpDoc标签跳过它们。
可悲的是,使用这个系统我有一些只有index.html
的空目录,我希望删除它们,所以我可以分发一个“干净”的包。
我需要删除的目录遵循以下路径:
views
`- {directoryName1}
`- tmpl
`- index.html
`- {directoryName2}
.... and son on ....
每次只更改directoryName,除非一切都保持不变 我尝试过这个ant任务,但它不起作用:
<delete includeemptydirs="true">
<fileset dir="${buildDir}/free">
<exclude name="**/*" />
<include name="**/tmpl/index.html"/>
</fileset>
</delete>
任何帮助?
答案 0 :(得分:2)
您需要resourcecount和条件检查的组合。我使用ant-contrib,但你必须包含额外的罐子。
<project name="blah" basedir="." default="conditionally.clean">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<macrodef name="m.clean">
<attribute name="dir.todelete"/>
<sequential>
<local name="count.files"/>
<resourcecount property="count.files">
<fileset dir="@{dir.todelete}">
<exclude name="index.html"/>
</fileset>
</resourcecount>
<if>
<equals arg1="${count.files}" arg2="0"/>
<then>
<echo message="will delete dir @{dir.todelete}" />
</then>
<else>
<echo message="will not delete dir @{dir.todelete}" />
</else>
</if>
</sequential>
</macrodef>
<target name="conditionally.clean">
<m.clean dir.todelete="etc/demo2"/>
<m.clean dir.todelete="etc/demo1"/>
</target>
</project>
您可以构建一个“foreach”(需要ant-contrib)来获取所有目录并调用上面的宏...
(我想custom task或embedded script可能比build.xml更清晰......)