play1.2.7區域性編譯,區域性打包完整解決方案
play 框架在開發效率方面確實非常的非常的不錯,優點在此處就不做介紹!
缺點在後期,後期專案較大後,打包越來越慢,打個包 10 多分鐘,這在更新頻率非常高的公司,完全無法忍受,只能整體編譯,無法區域性編譯。
前段時間一直在研究如何達到這一目的(快速編譯、打包、部署),在瞭解的過程中,慢慢有了一套完整的解決方案,來處理 play 的這個弊端。今天將近期的瞭解的整理成文章分享給大家,希望能幫到在這方面有同樣困惑的朋友。
在上篇文章(http://blog.csdn.net/fasttime/article/details/50814716)
比如: 部分 java 類,部分 html 檔案。 但這始終只是我們單方面的行為,play 本身的並不會直接按我們的意願來處理。
那麼如何達到真正的 play區域性編譯 區域性更新呢? play 本身只支援整體打包,要想解決區域性編譯的問題,我們得從 play 本身的預編譯機制來進行分析。
比如需要找到 java template預編譯的位置,然後從這裡開刀。
綜上所述 解決方案的步驟如下:
一.採用 命令打包(預編譯)的方式,傳入指定引數 ,如指定的 java 或 html 檔案 (步驟一請參考 http://blog.csdn.net/fasttime/article/details/50814716 )
二.優化 play 原有的打包方式,接收並處理傳入的部分檔案,使其支援區域性打包(預編譯)
三.區域性打包(預編譯)工具化,使其能生成區域性更新包,而不是零散的預編譯檔案
通過以上3點,可快速生成區域性更新包,極大的提升了編譯及部署效率步驟一:
在命令中加入指定檔案的引數,如: -DspecifyJava=${path}\xx.java
步驟二: (直入主題,具體尋找過程,請自行觀察原始碼)
在 ApplicationClassloader.java 的 430 行,加入程式碼,指定部分 java 檔案進行編譯:
在ApplicationClassloader.java 類中提取公用程式碼來過載 loadApplicationClass 方法
TemplateLoader.java 的 219 行左右,進行部分Html檔案預編譯處理:
TemplateLoader.java 類中提取公用方法 compileHtml 方法
重要:優化程式碼後,需要將最新編譯後的 class 檔案替換 play-1.2.7.jar 包中的class
步驟三:(區域性更新包生成器,將步驟一、二融合並生成更新包)
通過步驟一、二點後,區域性編譯的目地是達到了,但每次區域性更新(一個檔案以上)都需要從不同的目錄獲取編譯好的檔案
再重新建立目錄生成區域性更新包,雖然區域性編譯的支援是完成了,但更新包的生成也是非常繁瑣的,此工具就是為此而且出生。
3.1 選擇要更新的檔案,直接在 eclipse 中複製路徑,建議採用小烏龜看提交記錄,選中要更新的檔案複製即可
3.2 將要更新的檔案整理好,放入檔案列表中
3.3 點選生成按鈕後,將自動開啟準備好目錄及更新檔案,只需壓縮成包上傳至伺服器快速部署即可
注:
1.程式碼路徑+檔案列表中每行的路徑要能真實找到檔案(支援多行,支援 java html js conf png 等大部分檔案)
2.play路徑,需要到 framework 的上一級(D:\develop\java\play_framework\play-1.2.7\framework 的上一級)
3.程式碼路徑及 play 路徑均可有配置檔案 config.conf 中進行配置,防止每次都啟動都要改路徑
4.區域性更新包生成器將刪除 java 原始碼,只保留空檔案
區域性更新包生成器下載地址:
http://download.csdn.net/detail/fasttime/9453996
1.只支援 32 位 jdk 1.6+
2.必須配置 java_home 環境變數
3.替換jar後區域性更新包生新器才會起作用
如還無法執行可聯絡: [email protected]