在Ant中,目标内的任务顺序是否重要?

时间:2010-06-25 18:38:42

标签: java tomcat ant

我想制作一个重启tomcat6的目标。现在,我有这样的事情:

<taskdef name="stop" classname="org.apache.catalina.ant.StopTask" />
<taskdef name="start" classname="org.apache.catalina.ant.StartTask" />

...

<target name="restart" depends="deploy" description="Restart Tomcat" >
    <stop url="${manager}" username="${username}" password="${password}" path="${path}" />
    <start url="${manager}" username="${username}" password="${password}" path="${path}" />
</target>

我可以在开始前依赖停止运行吗?或者我应该制作两个单独的目标,并且“开始”依赖于“停止”?

3 个答案:

答案 0 :(得分:5)

通常,您可以依赖Ant按顺序执行任务。在<start>完成之前,<stop>不会执行。

然而,考虑到Tomcat的本质以及“停止Tomcat”意味着什么,StopTask实际上做的是

  1. 连接到Tomcat的关闭端口并告诉Tomcat正常关闭
  2. 发送消息后,退出
  3. 因此,StopTask可以在 Tomcat完成关闭过程之前完成 - 该任务只是告诉Tomcat关闭,它不会等待它关闭。

    您的脚本中需要一些其他机制来确保您不会尝试启动Tomcat实例,而同一端口上的另一个实例仍处于关闭状态(例如,睡眠任意数量的秒)。

答案 1 :(得分:2)

是的,任务顺序很重要,在你的情况下,在'start'之前运行'stop'。但是,'停止tomcat'(过程,而不仅仅是任务)不能保证在'start'开始之前完成。

您可能希望进行'start'检查并等到tomcat未运行,然后再启动新实例。

答案 2 :(得分:1)

是的,停止会在开始前运行。当然,制作两个单独的目标可以让你从蚂蚁开始和停止,这可能是个人有用的。