Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant-如何从多个目标运行相同的程序_Ant - Fatal编程技术网

Ant-如何从多个目标运行相同的程序

Ant-如何从多个目标运行相同的程序,ant,Ant,有没有办法让ant多次执行多个依赖目标。考虑这一点: <target name="buildall" depends="mycommon,myDAO" /> <target name="myCommon" depends="initCommon, clean, makedir, compile" description=""> <echo> Build completed for myCommon </echo> </target&

有没有办法让ant多次执行多个依赖目标。考虑这一点:

<target name="buildall" depends="mycommon,myDAO" />

<target name="myCommon" depends="initCommon, clean, makedir, compile" description="">
    <echo> Build completed for myCommon </echo>
</target>

<target name="myDAO" depends="initDAO, clean, makedir, compile" description="">
    <echo> Build completed for myDao </echo>
</target>
我希望buildAll调用myCommon,它调用initCommon、clean、makedir、compile,然后调用myDAO,它调用initDAO、clean、makedir、compile

因此,我希望clean、makedir和compile任务被多次执行。它们是通用的,并基于initXXX任务中设置的属性运行

我试过这个:

<target name="buildall">
    <antcall  target="myCommon" />
    <antcall target="myDao" />
</target>
但它每次都会运行任务之外的所有东西,这不是我想要的。有什么想法吗?

首先:不要用它们来处理两者之间的共同点。例如,您可以定义一个编译宏,该宏以源目录的名称作为参数,它将基于该源目录名称创建destdir,并编译您的公共和DAO目标


所以,让蚂蚁发挥它的魔力吧。使用依赖项不是告诉Ant如何做某事的一种手段,而只是告诉Ant某个特定目标依赖于另一个目标。让蚂蚁算出执行的顺序。另外,不要将任务设置为要求您清除目录并重新初始化所有内容。您希望Ant通过不必重建或重新复制未更改的文件来帮助最小化生成。

每次任务之外的一切是什么意思?似乎可以按照您的意愿运行目标,但会带来其他问题?是的,我作为标记的子项有一系列的和任务。也许这是错误的。无论我指定了多少个目标,这些任务我都希望运行一次。问题是,如果我从eclipse运行并指定多个目标,它只运行元素一次,并且它会多次运行每个目标及其依赖项,即使依赖项以前已经运行过。当我在eclipse中运行时,一切都很好。当我在eclipse之外运行时,情况就不一样了。哦,发生这个问题是因为每次调用时,Ant都会为当前构建文件创建一个新的项目实例。通过这种方式,您可以控制调用目标中声明的属性和引用以及之前声明的属性和引用是否应由被调用的target-inheritAll和inheritref继承。我不使用Eclipse,所以我不知道它的行为和原因,但您的问题正是pure Ant如何工作。一个非常简单的解决方案:编写您自己的Ant任务,可能命名为,让它能够运行嵌套的Ant任务,并在其执行方法中:1。检查是否设置了系统属性,例如Ran;2.如果设置,则返回;如果没有,则运行嵌套任务;3.设置一个系统属性Ran。回答得很好,antcall确实是ant的目标。我明白你的意思。我认为诀窍在于,我的大多数任务clean、compile和makedir应该被定义为宏,而不是依赖目标。这些任务clean、compile和makedir是泛型的,并对initXXXX任务中设置的变量进行操作。现在我们可以将它们作为参数传递给宏调用。更好的解决方案。谢谢
<target name="clean">
    <echo>Clean up my working directory to be nice and sparkly</echo>
</target>
<target name="initDAO">
    <echo>Initialize stuff for my DAO build</echo>
    <echo>Maybe setup some properties?</echo>
</target>
<target name="makedir"
     depends="initDAO">
    <echo>I need my directories for building.</echo>
    <echo>But first, I need to setup stuff"</echo>
</target>
<target name="compile"
    depends="makedir">
    <echo>I need to compile my dao source"</echo>
    <echo>But first, I need to make the necessary directories</echo>
<target>
<target name="myDAO"
    depends="compile">
    <echo>Here's where I package up my DAO</echo>
    <echo>But I have to compile stuff before I can package it</echo>
</target>