ANT目标的递归调用,目标调用自身

时间:2017-04-24 08:47:26

标签: recursion ant ant-contrib

我有一个类似下面的ANT目标:

<target name="validate_master_resources" description="Ensure the target is valid for local test run">

        <exec executable="bash" outputproperty="swap">
            <arg value="-c"/>
            <arg value="free -m | grep '^Swap:' | awk '{print $4}'"/>
        </exec>

        <if>
            <islessthan arg1="${swap}" arg2="5000"/>
            <then>
                <echo>the value of the swap memory is: ${swap}</echo>
                <sleep minutes="10"/>
                <runtarget target="validate_master_resources"/>
            </then>
        </if>
</target>

正如您所看到的那样,它是一种递归目标,如果遇到某些条件,validate_master_resources会自行调用。

我决定使用runtarget(而不是ant调用)来避免创建新的ANT进程。

在临时测试几分钟后的工作,按预期工作,但在前2个“真实世界”运行中,它在20分钟后卡住......

我正在Jenkins工作,并表示这项工作在20分钟后才停止工作

正如你在下面所看到的那样,它已被多次调用,然后停留数小时,我需要杀死它......

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

validate_master_resources:
     [echo] The number of current Java processes is: 33 summed to the 45 is 78 

现在,我的问题是,这个问题(构建卡住)是否与此ant任务递归的事情有关?

是否有任何任务流程/标签可以帮助我管理这样的递归?

我是否以非法模式使用该任务,错误的行为取决于我创建的这个特定循环?

由于

1 个答案:

答案 0 :(得分:0)

这里没有问题,愚蠢的问题,唯一的问题是我没有在循环中取消设置变量而且我总是使用相同的值,这导致了脚本的其余部分导致的问题过程要挂...

解决!一定要小心使用ant中的变量,有时候范围可能很难管理!