2013-10-25 93 views
105

我正在運行Intellij Ultimate和Tomcat並部署戰爭。一切都部署到tomcat的webapp目錄。IntelliJ和Tomcat ....更改的文件不會被Tomcat自動識別

當我像xhtml文件一樣更改文件時,有沒有辦法讓tomcat自動獲取該更改?截至目前,我需要從intellij複製文件,並將其複製到它所在tomcat webapp目錄中的目錄。我知道某些文件需要重新編譯,但是xhtml不是其中之一。

回答

236

如果您使用IntelliJ IDEA部署戰爭,則無法完成此操作。但是,如果你部署了爆炸戰,它可以可以。在IDEA:

  1. 打開Tomcat的運行/調試配置(運行>編輯配置
  2. 轉到「部署」選項卡
  3. 在「部署在服務器啓動」部分,刪除(如果本次)神器my-webapp-name:war
  4. 單擊添加圖標,選擇「神器」,然後選擇my-webapp-name:war exploded
  5. 單擊確定(在「選擇工件部署」對話框)
  6. 仍然在運行/調試配置窗口中,選擇「服務器」選項卡
  7. 在該選項卡中,改變「在框架停用」設置爲任何「更新資源」或「更新類和資源」
    • 更新資源:所有更改的資源(即,除類以外的所有應用程序組件)都將被更新。
    • 更新等級:和資源。所有更改的資源都將更新;改變的類將被重新編譯。請注意,是否更新實際的類取決於功能Web服務器。如果我記得,Tomcat將重新加載html/xhtml和jsp文件,但不包含JSP或Servlet使用的Servlet或類。您需要修改Tomcat才能使用動態類加載器。
  8. 您還可以設置「‘更新’行動也是如此。
    • 這個決定,當你打了更新Update icon圖標(或按Ctrl + F10)在運行窗口中會發生什麼。
    • 「顯示對話框中的」確定IDEA提示您每次打更新圖標
  9. 單擊確定時間。

現在無論何時您進行更改,IDEA都會在IDEA框架停用時重新部署更改的文件(即,失去了重點)。這需要一兩秒鐘,您會在IDEA中較低的狀態欄中看到它。明顯。你仍然需要刷新你的網頁瀏覽器,以便獲取新文件(除非頁面有像提取那樣的自動刷新Ajax)。

與Tomcat的良好結合是將「On frame deactivation」設置爲「Update Resources」並將「On'update'操作設置爲」重新部署「或」重新啓動服務器「。幀失活,和階級通過「更新」行動更新。

名爲ZeroTurnaround一個公司銷售JRebel這是一個動態的類加載器的解決方案。他們也有five part series on the subject這是非常好的。

+0

謝謝。這個伎倆。我是新的Stackoverflow,所以我不知道如何把它作爲一個回答的問題。 – Peter

+0

我有錯誤:'錯誤:神器'我的webapp名稱:戰爭爆炸'具有無效的擴展名'如何解決? –

+3

我也強烈建議使用DCEVM進行自動類重裝。然後,您可以使用「更新類和資源」將所有更改應用於源代碼,而無需重新部署應用程序。請參閱:http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/。除了本教程解釋的內容之外,還需要在Tomcat運行配置的Setup/Connection - Debug選項卡中將JAVA_HOME設置爲指向DCEVM的JRE。 –

13

讓我描述的動作序列使用屏幕截圖:

  1. 打開你的Tomcat運行/調試配置(運行>編輯配置)

enter image description here

  • 點擊添加圖標,選擇 '僞影',然後選擇pizza_mvc:war explodedenter image description here

  • 修改 '關於更新行動' 和 '論框架diactivation': enter image description here

  • 要刷新你的資源
  • 每次,按<Ctrl> + F10

  • +0

    感謝提醒我檢查「在'更新'行動」 – km1

    6

    如果要更新類和資源。在「調試模式」下運行Tomcat。此模式下的InteliJ更新沒有問題類和資源。

    得到同樣的問題。 InteliJ沒有更新我的項目,因爲我以「運行模式」運行。當我在調試模式下運行並按Ctrl + F10,它更新類和資源。

    0

    我找到了更好的方法。

    Eclipse我們已經自動編譯+重新加載靜態文件。實際上,靜態文件直接從src/main/webapp提供。

    的IntelliJ,而不是直接從SRC服務/主/ web應用,則在目標創建的文件夾,在其中你將有你的的src/main/webapp的以及其他方面相關的副本.. web-inf/classes/lib。

    如果你把而不是目標的爆炸神器的輸出的src/main/webapp的,它不會覆蓋你的源文件,它將直接服務,您不會有打 - 更新資源/更新資源和類

    所以,你需要的IntelliJ做的是

    1. 修改展開神器輸出目錄的src/main/webapp的 enter image description here
    2. 做出保存和重新編譯/編譯髒類(CMD + Shift + F9) enter image description here enter image description here
    3. 編輯註冊表和喜好自動構建和構建宏,而應用程序運行(CMD + Shift + A鍵 - 註冊表)。 enter image description here enter image description here

    在此之後,如果您有來自的IntelliJ外部改變的靜態文件的作業,你會馬上看到變化,而不去的IntelliJ和更新資源,而對於類你有宏,節省,並編譯(注意:你也可以點擊Compile/Recompile:cmd + shift + F9/cmd + F9 - 如果你有多個打開的編輯器會看到你的髒編輯器不會變髒,並且變化重新加載)

    +0

    看來,如果你有註冊表compiler.automake ..啓用它只推命中保存你的更改。 –