2010-06-25 19 views
4

我想做一个目标来重新启动tomcat6。现在,我有这样的事情:在Ant中,目标事物中的任务顺序是?

<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> 

我可以在开始之前依靠停止运行吗?还是应该制定两个单独的目标,并且“开始”取决于“停止”?

回答

5

一般来说,您可以依靠Ant来按顺序执行任务。在<stop>完成之前,<start>不会执行。

但是给出的Tomcat的性质和它的意思为“停止Tomcat”,什么StopTask实际上做的是像

  1. 连接到Tomcat的关闭端口,并告诉Tomcat能够正常关闭
  2. 一旦发送消息,退出

因此,StopTask可以预计完成 Tomcat的已完成它的关机过程之前 - T的他的任务只是告诉Tomcat关闭,它不会等待它关闭。

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

1

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

2

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

您可能希望进行'开始'检查并等待,直到tomcat未运行,然后开始新实例。