2012-03-19 74 views
1

我正在開發Web應用程序,並在Eclipse下開發時將Jetty作爲開發和測試環境運行。如何配置Jetty以在更改類時重新加載WebAppContext

當我對Java類進行更改時,Eclipse會自動將它們編譯到生成目錄,但在停止並啓動服務器之前,Jetty將不會看到更改。我知道Jetty支持使用ContextDeployer進行「熱部署」,它將刷新更新的應用程序上下文,但它依賴於更新上下文目錄中的上下文文件 - 這對我來說不是很有用。

有沒有一種方法來設置Jetty,以便在它使用的任何類更新時重新加載Web應用程序?

我目前的jetty.xml看起來是這樣的:

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 
    <Configure id="Server" class="org.eclipse.jetty.server.Server"> 
     <Set name="ThreadPool"><!-- bla bla --></Set> 
     <Call name="addConnector"><!-- bla bla --></Call> 
     <Set name="handler"> 
      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> 
      <Set name="handlers"> 
      <Array type="org.eclipse.jetty.server.Handler"> 
       <Item> 
       <New id="webapp" class="org.eclipse.jetty.webapp.WebAppContext"> 
        <Set name="displayName">My Web App</Set> 
        <Set name="resourceBase">src/main/webapp</Set> 
        <Set name="descriptor">src/main/webapp/WEB-INF/web.xml</Set> 
        <Set name="contextPath">/mywebapp</Set> 
       </New> 
       </Item> 
       <Item> 
       <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> 
       </Item> 
      </Array> 
      </Set> 
      </New> 
     </Set> 
    </Configure> 

回答

3

我們還沒有找到(從實現我們自己的org.eclipse.jetty.deploy.providers.WebAppProvider的版本除外)這樣做的方式。

我們已將jetty配置爲從webapps文件夾(WebappDeployer的屬性monitoredDirName)熱部署webapps。

然後要進行熱部署,我將此文件夾中的鏈接重新創建到我的Eclipse項目的src/main/webapp文件夾中。鏈接必須加後綴.war

不是真的自動,但足夠好,並避免Jetty重新啓動。

如果你走了重新實現WebappDeployer的路線,我不會監視.class文件中的更改 - 它們在由Eclipse編譯時會發生太多變化,尤其是在自動構建的情況下。我將通過監視對web.xml文件的更改來實現「Tomcat like」解決方案。然後,從Eclipse保存到此文件的虛擬變更將觸發重新部署。

+0

我已經成功地使用了類似的解決方案,而爲Jetty開發插件:我使用ContextProvider(http://wiki.eclipse.org/Jetty/Feature/ContextDeployer)和context.xml文件來設置webapp。在上下文文件中設置應用程序類的位置非常重要(使用''),而不是在Eclipse啓動配置中。然後,我在項目配置中添加了一個Ant構建器,在自動構建時使用'touch'任務來更新context.xml並導致上下文重新部署。 – Guss 2012-03-19 10:34:11

+0

在這種使用場景中,針對上下文部署者的+1# – 2012-03-19 13:46:02

+0

@jesse操縱context.xml文件的問題在於他們不在戰爭之中。這使得構建和部署變得複雜 – 2012-03-19 13:58:34

0

也可以配置使用Maven您的碼頭的應用並開始定期與詹金斯構建(甚至每隔幾秒鐘,這取決於你正在使用的maschine)

相關問題