如何测试ant中的目录是否为空?
答案 0 :(得分:18)
您可以使用pathconvert
任务使用setonempty
属性执行此操作。有关用例,请参阅this example。
<pathconvert refid="myfileset"
property="fileset.notempty"
setonempty="false"/>
仅当那些refid为fileset.notempty
的文件集不为空时,才会设置属性myfileset
。
您只需要在您的目录中定义myfileset
,并且不会有任何排除确实让目录为空测试:
<fileset dir="foo/bar" id="myfileset"/>
答案 1 :(得分:3)
这只是tonio's answer的补充。
在此示例中,cvs checkout
使用git
命令进行模拟:
git clone
为空时dir
git fetch
其他<target name="cvs_checkout" depends="git.clone, git.fetch" />
<target name="git.clone" depends="check.dir" unless="dir.contains-files">
<echo message="Directory ${dir} is empty -} git clone" />
<exec executable="git">
<arg value="clone"/>
<arg value="${repo}"/>
<arg value="${dir}"/>
</exec>
</target>
<target name="git.fetch" depends="check.dir" if="dir.contains-files">
<echo message="Directory ${dir} contains files -} git fetch" />
<exec executable="git" dir="${dir}">
<arg value="fetch"/>
</exec>
</target>
<target name="check.dir">
<fileset dir="${dir}" id="fileset"/>
<pathconvert refid="fileset" property="dir.contains-files" setonempty="false"/>
</target>
答案 2 :(得分:0)
仅在目录为空时设置属性的脚本解决方案:
<script language="javascript">
tests = new java.io.File(project.getProperty("source.test.java.dir"));
if (tests.list().length == 0) {
java.lang.System.out.println('no tests: skip.test=true');
project.setProperty("skip.test", true);
}
</script>