1. 程式人生 > >使用tomcatPlugin配合JRebel解決maven專案依賴war的打包和熱部署的問題

使用tomcatPlugin配合JRebel解決maven專案依賴war的打包和熱部署的問題

一、問題出現         事情是這樣的,原本我們web專案每一個都是獨立的,頂多是依賴一些打包為jar的公共專案模組,但是webapp下的資原始檔還是獨立的。但是,由於我們自己封裝的框架包含著一部分公共的前端資原始檔(js、css、img等)和頁面模板,當web專案多了,檔案冗餘自然就多了,如果框架需要調整修改,那得每個專案都要改一遍,那不是煩死?所以,我們決定想辦法把這部分檔案也要抽取出來,像jar包一樣需要用到就通過maven依賴進來就行了。但是,這些在webapp下的檔案應該是一個web專案的結構啊,那應該是編譯成war包,也就是說war包需要依賴war包。然後聽老大說maven3以上是支援war依賴war的(maven真不是蓋的,gradle不要欺負人家
),所決定重構一下專案(重構這個詞挺嚇人的)。。。         問題出來了,我們原來使用的tomcat7-maven-plugin外掛執行(tomcat7:run)專案時,居然沒有把所依賴的war給打包進去!專案是跑起來但是頁面是裸奔的啊。。。(因為核心的js、css等都找不到)但是使用maven的install命令打包出來的war是有包含所依賴的war的內容的。那就奇怪了,一定是tomcat7-maven-plugin搞的鬼,然後找了很多相關的配置資料,心想應該是overlay的配置問題,找了很久試了N遍還是不行(反正是沒解決,不要找藉口也不多說了),但是其他的兄弟還要開發除錯呢,我這個分支也急需合併到主分支,所以只能另闢蹊徑了。

二、問題分析
        既然install打包是正常的,那我使用外部的tomcat來部署應該是沒問題的,馬上下了個tomcat,先把生成的war扔進去跑一下再說,噔噔噔果然沒問題。OK,那麼使用Eclipse繫結外部的tomcat,解決debug除錯,配上虛擬路徑,再順便把JRebel 6配上去(之前JRebel 5 配上但是有bug有時會失效,聽說JRebel6 修復了)實現熱部署,只要修改完成後重新install一下,不需要重啟tomcat,也是個不錯的解決方案~只是以前修改網頁資原始檔都可以立即更新,現在需要install一下了(非“Hot Code”程式碼不用install也會重新載入),但這也是沒辦法的辦法了。不要問為什麼不用自帶的tomcat server,我們用的是Eclipse javase版本(當時裝錯了哈哈哈,哭),而且我們也試過tomcat server和
tomcat7-maven-plugin一樣沒有把依賴的war打包進去,於是在網上找到了tomcatPlugin這個外掛,下了個最新版本V331,再下個JRebel 6.3.0,可以開始幹了。         JRebel 6.3.0(破解的你懂的) 三、解決步驟         1、裝好tomcatPlugin外掛(離線安裝,放入Eclipse的plugins目錄即可),重啟伺服器後就出現了下圖中的按鈕:
        2、進入Window->Preferences->Tomcat中,繫結下載的tomcat,別忘了在Server.xml或Catalina/localhost中配上虛擬路徑指向target中的web專案。
        3、進入JVM Settings把下載好的JRebel配上,點選一下【Create a launch Configuration】(你可以不點試試,我一上來就點了,也沒試過不點行不行 = = 在同事的機器上沒點貌似是不行的),根據自己的檔案路徑配好。因為JRebel是JVM外掛,所以是配在JVM引數的-javaagent引數中,紅框下方的引數是隻配了上方引數執行時,JVM提示必須加上的,具體作用我這裡就不深究了。
        4、把專案的原始檔繫結上,才可以debug除錯。
        5、把專案都install好,點選【Start Tomcat】成功啟動沒有報錯,啟動過程中出現下方日誌,則代表繫結上JRebel了:
        6、修改一下log4j.xml再重新install,出現下方Reloading configuration則說明JRebel熱部署已經生效了,趕緊打個斷點除錯起來吧~
四、總結         其實熱部署也沒那麼熱,當修改到一些“Hot Code”時,JRebel是不會重新載入程式碼的,但是至少修改一些配置檔案還是不用重啟的,甚至是修改了一些依賴的jar專案的程式碼也不用重啟哦。         解決方案有很多種,這種一定不是最好的解決方案,但是重要的是有沒有解決好問題,還有解決問題的思路,最後就是挑選最簡單最適合團隊的解決方案了。這次深刻體會到整合開發是有多麼偉大,假如所有的工作不使用Eclipse、maven、JRebel等工具外掛進行開發,從編碼和編譯到除錯和部署,起碼多出10倍的工作量!所以,優秀的程式設計師就應該使用計算機自動化完成重複的工作,less is more!         最後,如果博文有錯誤的地方,懇請指正;如果有更好的思路和解決方案,跪求分享;如果有好的想法,歡迎交流!