Ant 蚂蚁+;如果文件存在,则运行目标

Ant 蚂蚁+;如果文件存在,则运行目标,ant,Ant,只有当某个位置存在java文件时,我才需要运行另一个任务。我搜索了同样的内容,发现了如下内容: <target name="check-abc"> <available file="abc.txt" property="abc.present"/> ... 但是在我的情况下,文件路径不是固定的。我有一个目录与许多子目录和文件。如果java文件存在于这些位置中的任何一个,则该属性应设置并运行第二个目标。请给出建议。好的,我为这个问题制定了一个解决方案,但您需要让

只有当某个位置存在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获得。您可以使用在运行时下载它

我发现以下错误。问题:无法创建任务或类型,原因:名称未定义。措施:检查拼写。操作:检查是否已声明任何自定义任务/类型。操作:检查是否发生了任何/声明。您必须在生成中定义antContrib任务,因此在我发布的代码中使用
depends=“defineAntContribTasks”
。的首页描述了如何执行此操作。我在此版本中明确使用了其他ant contrib任务。我是否需要将其定义为另一个目标以使其工作?请告知无论您在何处定义ant contrib任务都可以,只要它们在我制定的目标运行之前被引入构建。我通常在名为“defineAntContribTasks”的目标中执行此操作,因此,如果在目标中定义它们,请使检查abc目标依赖于此。