Java Web项目的保存和刷新
如何配置計算機以保存并刷新Java Web項目? 當您向開發(fā)人員提出此問題時,答案以“哦,好吧……”開頭,并以某種可行的方式繼續(xù)描述。 每個人都有自己的方式。
首先–為什么需要這個? 因為執(zhí)行復制和重新啟動服務器是生產(chǎn)力的殺手-浪費大量時間。 如果不提高將項目與容器同步的工作效率,即使是進行簡單的修復,也可能需要完整的構(gòu)建和部署周期才能進行測試。 這可能會花費很多時間,具體取決于項目的規(guī)模。
我會寫下一些內(nèi)容,以補充我的StackOverflow答案 :
- IDE集成– IDE可以選擇添加本地服務器并將項目部署到該服務器。 這需要附加的插件,配置哪些工作空間文件在servlet容器中的位置,并且并不總是有效。 當圖片中有Maven時,它要么不起作用,要么需要另一個插件(如我的這個答案所述 )。
- 您使用一些工具來同步目錄結(jié)構(gòu)。 在Eclipse中,有FileSync插件 ,它使您可以配置將哪些工作空間文件放到servlet容器中的什么位置。 可能存在執(zhí)行相同操作的其他工具(例如unison ),或者您可能已經(jīng)編寫了一些腳本或插件來執(zhí)行此操作。
- 從maven運行servlet容器(如果使用maven)–使用tomcat插件或jetty插件即可 。 缺點是,要在調(diào)試模式下運行,您需要附加外部調(diào)試器(而不是為此使用內(nèi)置的IDE服務器集成)。 并且它需要插件配置。 另外,請記住,如果使用碼頭(較快速的選項)進行開發(fā),那么如果您的生產(chǎn)容器是tomcat,則行為可能會有所不同。 麻煩不大,但仍要牢記一些。
- 手動復制項目文件–一開始聽起來并不可怕,但隨后又開始困擾您–畢竟,這是一項要求自動化的任務。
因此,現(xiàn)在您已將類文件和資源(css,javascript,圖像,配置文件)復制到servlet容器。 但是,為了使它們起作用,您需要一些HotSwap功能。 也就是說,讓jvm重新加載類定義。 有四個選項:
- 常規(guī)HotSwap –只需在調(diào)試模式下運行servlet容器即可。 每當更改類文件時,就可以交換方法的主體。 但是,更改方法或類簽名需要重新啟動。 我一直使用此選項,而且還沒有那么痛苦–在所有方法簽名重新定義和重構(gòu)都不會經(jīng)常發(fā)生之后,即使這樣做了,也可以重新啟動服務器,因為您不必專注于使某些特定功能起作用。
- DCEVM – VM增強功能,允許完全重新加載類。 我沒有使用過它,但是如果它可以正常工作,它應該可以解決上面提到的簽名重新定義問題。
- JRebel –商業(yè)替代品。 我從未使用過它,我聽說過它很好,而且我知道還有很多額外的功能,可以讓您在各種框架中使用它,例如,重新配置spring上下文不需要重新啟動。 我不認為這些事情經(jīng)常發(fā)生,因此我從不推薦JRebel(商業(yè)化),但這是您應該考慮的重要選擇。
- 每次更改都重新啟動服務器。 如果項目很小,這將花費很少的時間,因此可以選擇。 但是我什至不建議在小型項目中使用它,因為至少HotSwap易于配置(而且您仍然需要調(diào)試模式)
如此眾多的選擇–在Java世界中如此典型。 他們或多或少地工作良好。 但是,我決定再添加一個選項,該選項幾乎具有零配置– aardWARk 。
通過將aardwark.war文件放入您的tomcat中并重命名它,使其名稱包括項目目錄的路徑,并進行同步處理,即可工作。 請注意,這是添加到上面第一個列表的選項。 對于熱交換,您仍然需要第二個列表中的三個選項之一。 在項目頁面上有一個更詳細的設(shè)置指南,但有幾點需要強調(diào):
- 它僅適用于Maven項目。 為了具有零配置,需要使用Maven的Convention-over-configuration
- 它獨立于IDE,獨立于servlet容器。
- 它完成了我認為上面沒有其他解決方案可以做的事情(也許除了JRebel之外)-它也將同步依賴于Maven的項目。 通常,您有一個多模塊項目,其中一些項目打包為jar,而其他(網(wǎng)絡(luò))項目則依賴于它們。 但是,您需要能夠在“核心”模塊中更改類,并立即查看Web應用程序中的更改。 這將意味著重新包裝并重新裝入罐子。 AardWARk只需解析pom,找到相關(guān)項目并將其類復制到classpath,即可覆蓋現(xiàn)有定義
- 支持多個項目,還支持通過屬性文件進行配置(如果您不想或無法命名war文件來包含項目路徑)
- 更改pom時不會同步j(luò)ars文件-您需要重建并重新啟動。 嵌入Maven和運行依賴關(guān)系目標的一些解決方法,但是如果添加了新的jar,則無論如何都需要重新啟動。
- 它之所以被稱為aardWARk,有一個簡單的原因-最好在您的項目之前加載此war文件。 不一定,因為僅同步j(luò)ar文件才需要,但是最好同步。 Servlet容器不能保證Webapp的加載順序,但是很可能是按字母順序選擇它們的,因此很有用(出于明顯的原因,用war代替var)。
我希望它是一個有用的工具,如果人們開始使用它并提供反饋,我將感到非常高興。
翻譯自: https://www.javacodegeeks.com/2013/11/save-and-refresh-with-java-web-projects.html
總結(jié)
以上是生活随笔為你收集整理的Java Web项目的保存和刷新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防止System.exit调用
- 下一篇: 人到80岁叫什么老人 80岁是耋老人