2010-06-25 62 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未運行,然後開始新實例。