2013-11-26 116 views
14

我正在嘗試爲Java EE 7使用eclipse kepler。我已經安裝了JBoss Tools併成功添加了JBoss Wildfly作爲服務器。但是我的更改不會自動部署。無論如何,應用程序可以像使用glassfish一樣自動部署?Eclipse Kepler和JBoss Wildfly熱部署

回答

24

使用Eclipse,點擊兩次您WildFly服務器上編輯以下屬性:

  1. 發佈:選擇「生成事件後自動發佈」。我希望將發佈間隔也更改爲1秒。
  2. 應用刷新行爲:勾選「自定義應用程序重裝......」複選框並編輯正則表達式模式\.jar$|\.class$

就是這樣。祝你好運!

+2

+1,但不幸的是,第二種選擇有嚴重的缺點:整個應用狀態丟失。 –

+0

有一件事情使它對我有效:不要將它作爲壓縮文件進行部署。在eclipse Wildfly屬性中,不要選中「將項目部署爲壓縮存檔」選項 –

8

我假設你使用的是最新版本的Wildfly(寫入8.0 Beta 1)。

在standalone.xml配置文件中,查找< jsp-config/>。添加屬性development =「true」它應該熱部署。將得到的配置將看起來像這樣:

<jsp-config development="true"/> 
+0

嗨@Sean我這樣做了,但是當我更改了一個java源文件時,我沒有注意到這些更改。但是,如果我更改了一個xhtml,它就會被反映出來。 – zulq

4

在XPath中= // servlet的容器​​/ JSP-配置文件添加屬性(發展,檢查間隔,修改測試間隔,重新編譯-上失敗)配置/

<servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only"> 
    <jsp-config development="true" check-interval="1" modification-test-interval="1" recompile-on-fail="true"/> 
</servlet-container> 

(它的工作原理WildFly-8.0.0.Final)

20

兩個@varantes和@Sean基本上是正確的,但這些答案都是不完整的。

不幸的是在Java服務器環境,只有這樣纔能有充分的,零停機熱部署是使用支付JRebel或免費spring-loaded工具。

但是對於小型項目,有一些方法可以通過部分熱部署加快工作速度。本質:

  1. 如果啓用選項自動發佈在資源變化 然後裏面*.html變化,*.xhtml文件立即 反映,只要你刷新瀏覽器。
  2. 爲了使熱部署工作*.jsp文件了,那麼你就應該 內$ {wildfly家庭} /standalone/configuration/standalone.xml 化妝以下更改:
    <jsp-config/>
    替換:
    <jsp-config development="true"/>

重新啓動服務器並享受網頁文件的熱部署。


但修改*.java源文件時,則只能進行部分熱部署。
正如他的回答說@varantes,使應用刷新行爲設置爲\.jar$|\.class$正則表達式是一種選擇,但有嚴重的缺點:整個模塊重新啓動,因此:

  1. 這需要一些時間(視模塊有多大)。
  2. 整個應用程序狀態丟失。

因此,我個人不鼓勵這種解決方案。
JVM支持(在調試模式下)方法體的代碼交換。因此,只要您只修改現有方法的實體,您就在家中(零停機時間,更改會立即反映出來)。但是你必須在服務器設置中禁用自動發佈,否則應用程序的狀態仍然會被重新發布所破壞。

但如果你是嚴重crafing Java代碼(添加類,註釋,構造函數)則可惜的是,我只能建議設置發佈到從不自動發佈(或關閉服務器),當你完成你的工作在java文件,然後手動重啓模塊(或開機服務器)。由你決定。


它適用於小型的Java項目,但對於更大的,JRebel的是無價的(或只是彈簧),因爲上述所有的方法是不夠的。
順便說一句:也因爲這樣的問題,像Rails/Django/Play! Framework這樣的解決方案獲得如此巨大的人氣。

祝你好運,快速編碼!

+0

即使使用Play!框架,如果項目增長到一個體面的大小,你會再次遇到同樣的問題。 –

+0

@AntonArhipov我不明白爲什麼。你的意思是代碼熱替換問題?我不這麼認爲(雖然從未見過這麼大的Play!項目)。或者你的意思是長時間啓動? –

+0

具體來說,熱代碼替換。我在JRebel團隊(爲了記錄),我們從未考慮過爲那些奇特的框架實現JRebel支持。但是現在用戶開始越來越多地詢問支持 - 應用程序變大,原生框架重新加載沒有跟上。 –

0

在調試模式下啓動服務器,它將跟蹤方法內的機會。其他更改它會要求重新啓動服務器。