Ant 蚂蚁+;如果文件存在,则运行目标
只有当某个位置存在java文件时,我才需要运行另一个任务。我搜索了同样的内容,发现了如下内容:Ant 蚂蚁+;如果文件存在,则运行目标,ant,Ant,只有当某个位置存在java文件时,我才需要运行另一个任务。我搜索了同样的内容,发现了如下内容: <target name="check-abc"> <available file="abc.txt" property="abc.present"/> ... 但是在我的情况下,文件路径不是固定的。我有一个目录与许多子目录和文件。如果java文件存在于这些位置中的任何一个,则该属性应设置并运行第二个目标。请给出建议。好的,我为这个问题制定了一个解决方案,但您需要让
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
...
但是在我的情况下,文件路径不是固定的。我有一个目录与许多子目录和文件。如果java文件存在于这些位置中的任何一个,则该属性应设置并运行第二个目标。请给出建议。好的,我为这个问题制定了一个解决方案,但您需要让它发挥作用
<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>
你也许可以抛弃回音陈述;它们主要是用于查看正在检查的内容。我的示例使用的是一个用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>
def ant=new AntBuilder()
文件集(id:“javaFiles”,dir:“src”,包括:“***.java”)
ant.project.references.javaFiles.each{
self.value=true
}
或者,您可以编写一个自定义java条件,从而避免在构建中嵌入脚本语言
- jar可从Maven central获得。您可以使用在运行时下载它
depends=“defineAntContribTasks”
。的首页描述了如何执行此操作。我在此版本中明确使用了其他ant contrib任务。我是否需要将其定义为另一个目标以使其工作?请告知无论您在何处定义ant contrib任务都可以,只要它们在我制定的目标运行之前被引入构建。我通常在名为“defineAntContribTasks”的目标中执行此操作,因此,如果在目标中定义它们,请使检查abc目标依赖于此。