只有当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文件,则该属性应设置并运行第二个目标。请指教。
答案 0 :(得分: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>
你可能会抛弃回声陈述;他们大部分时间都可以看到正在检查的内容。
答案 1 :(得分:0)
我的示例使用custom script condition,在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条件,这样就无需在构建中嵌入脚本语言。