0

仅当某个位置中存在 java 文件时,我才需要运行另一个任务。我已经搜索过相同的内容,并遇到了如下内容:

<target name="check-abc">
<available file="abc.txt" property="abc.present"/>

</target>

<target name="do-if-abc" depends="check-abc" if="abc.present"> ... </target>

但是在我的情况下,文件路径不固定。我有一个包含许多子目录和文件的目录。如果这些位置中的任何一个都存在 java 文件,则该属性应设置并运行第二个目标。请指教。

4

2 回答 2

0

好的,我为此制定了一个解决方案,但是您将需要ant-contrib才能使其工作。

<target name="check-abc" depends="defineAntContribTasks">
    <path id="foo">
        <fileset dir="${src.dir}">
            <include name="**/*.java"/>
        </fileset>
    </path>
    <for param="some.file">
        <path refid="foo"/>
        <sequential>
            <echo message="checking @{some.file}"/>
            <property name="abc.present" value="true"/>
        </sequential>
    </for>
    <echo message="present = ${abc.present}"/>
</target>

<target name="do-if-abc" depends="check-abc" if="abc.present">
    <!-- whatever -->
</target>

您可能可以放弃 echo 语句;它们主要是为了让您可以看到正在检查的内容。

于 2013-01-10T16:03:14.783 回答
0

我的示例使用自定义脚本条件,在 groovy 中实现。

<project name="build" default="build">

    <path id="build.path">
        <pathelement location="lib/groovy-all-2.1.0-rc-1.jar"/>
    </path>

    <condition property="java.found">
        <scriptcondition language="groovy" value="false" classpathref="build.path">
            def ant = new AntBuilder()

            ant.fileset(id:"javaFiles", dir:"src", includes:"**/*.java")

            ant.project.references.javaFiles.each {
                self.value = true
            }
        </scriptcondition>
    </condition>

    <target name="build" if="java.found">
        <echo message="Found java files"/>
    </target>

</project>

或者,您可以编写自定义 java 条件,这样就无需在构建中嵌入脚本语言。

于 2013-01-10T23:59:57.570 回答