检查Ant文件集中是否存在文件

时间:2015-12-03 19:57:07

标签: file collections ant fileset

我在Ant构建文件中使用FileSet,该文件被作为外部源的输入读取。如何检查FileSet中是否存在特定文件?

例如,如果正在读取的FileSet是@font-face { font-family: 'Comfortaa Regular'; src: url('Comfortaa.eot'); src: local('Comfortaa Regular'), local('Comfortaa'), url('Comfortaa.ttf') format('truetype'), url('Comfortaa.svg#font') format('svg'); } ,我应该能够在其中找到MyClass.java。但是,如果FileSet为**/src/*.java,则MyClass.java不在其中。

即使有一种方法我可以扩展FileSet并执行包含检查的字符串,那么这应该可行。

有很多方法可以在FileSet中创建选择器,但是我找不到任何可以告诉如何在给定的FileSet中查找/选择文件的方法。所以我不能用一个我可以尝试的例子来支持它。任何帮助将非常感激。

2 个答案:

答案 0 :(得分:3)

使用restrict资源集合仅包含指定文件:

<project ... xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">

...

<restrict id="filtered.fileset">
    <fileset refid="source.fileset"/>
    <rsel:name name="MyClass.java"/>
</restrict>

<condition property="file.found" value="yes">
    <resourcecount when="greater" count="0" refid="filtered.fileset" />
</condition>

答案 1 :(得分:0)

我通过完成整个Fileset与Fileset的交集来实现它,该Fileset只包含我正在查找的这个文件,并验证计数是否等于1.其他条件可以很容易地进行AND-ed或OR-ed。

<target name="checkSomething">
        <condition property="something.present">
            <and>
                <available file="/src/theFile"/>
                <resourcecount when="equal" count="1">                  
                    <intersect>
                        <fileset dir="${src.dir}" includes="*"/>
                        <fileset dir="${src.dir}" includes="**/src/something.java"/>
                    </intersect>
                </resourcecount>
            </and>
        </condition>
        <echo message="Something present: ${something.present}"/>
    </target>