這段時間要研究WebGL技術,做一下三維建模項目,涉及到較多的前端編碼。eclipse編譯器那令人着急的編碼提示功能,以及丑惡的界面對項目的開展造成了一定的阻礙。為解決這個問題,轉向IntelliJ Idea這款IDE,下載了最新版,完成破解,開啟新征程。
歷史證明摸着石頭過河,總是要喝兩口水的。征服之路:一、創建多模塊的Maven項目,與eclipse建項過程差不多,略過不提;二、通過Tomcat發布web站點后,怎樣實現文件的熱加載,即實時同步。這個問題比較蛋疼,網上一般提到的說法就是Tomcat在build時,發布展開的war包,即war exploded模式。但是我按照網友介紹,進行了一系列設置后,發現我的webapp文件編輯后不能很好的同步更新。js文件還成功了幾次,freemarker文件壓根沒反應,過了一晚上再看,連js的更新也沒有了。折騰了半天也沒個結果,有網友說用Jrebel插件,可這玩意兒要收費,嘗試着破解后發現還不能與IDE兼容,無奈放棄。后來考慮直接把webapp資源拷貝到發布目錄吧,為此選擇了Ant Build方式。接下來,我就以這個建設的項目為例,講解下自己的web資源熱加載實現過程。
一、多模塊Maven項目的結構展示
參考:理解 IntelliJ IDEA 的項目配置和Web部署
Project Structure > Project Setttings > Artifacts:項目打包設置方案中添加web站點的兩種打包方案,war是以生成war包再部署的方式發布,war exploded是通過生成展開目錄架構的文件夾的方式發布。
war exploded在文件更新自動同步時起作用,不必每次都打war包。

二、配置Tomcat運行方式
參考:IntelliJ IDEA14 + tomcat 設置熱部署


三、配置Ant Build構建方案,同步項目資源文件到Debug的發布目錄下
1、我在web項目根目錄下添加一個build.xml的ant配置文件,配置中添加一個策略,將src/main/webapp/目錄下的文件拷貝到發布目錄 target/train-simulate-web-1.0-SNAPSHOT/ 下。project.basedir屬性設置為".",指向配置文件所在的根目錄。這里需要說一下,debug模式下,tomcat直接運行的是war exploded發布輸出的目錄。

1 <?xml version="1.0" encoding="UTF-8"?> 2 <project name="" default="fileCopy" basedir="."> 3 <property name="webapp_dir" value="src/main/webapp/"/> 4 <property name="to_tomcat" value="target/train-simulate-web-1.0-SNAPSHOT/"/> 5 <target name="fileCopy"> 6 <copy todir="${to_tomcat}"> 7 <fileset dir="${webapp_dir}"></fileset> 8 </copy> 9 </target> 10 </project>
2、將Ant Build的拷貝策略附加到項目的編譯動作上(自動化實現的重要步驟)。我這里設置的是在編譯前執行Ant構建。這一步設置完成后,結合Tomcat配置中的update classes and resources設置。每次執行update操作或從IDE上失去焦點,都將觸發項目的build操作,build操作再觸發Ant構建的執行,從而達到web資源的實時更新目的。

小結:
配置到這里,web項目的資源文件,class文件都能夠實現自動化的更新部署了,不必每次更新都去人為的重新發布。效果上湊合可以滿足我目前的心理需求底限了。不過這種搞法,還是無法解決web外的其他jar包模塊的自動發布問題,因為jar項目修改后,需要打包成新的jar包,替換到tomcat發布目錄下。但是實際上在debug模式下,jar包文件被進程占用,是沒辦法重新替換的。這種情況,就只能重啟DEBUG調試了。假如我對IDE的理解有誤,事實上有更好的方案來處理熱部署問題,歡迎留言告訴我一聲!
