1. 程式人生 > >play1.2.7區域性編譯,區域性打包完整解決方案

play1.2.7區域性編譯,區域性打包完整解決方案

   play 框架在開發效率方面確實非常的非常的不錯,優點在此處就不做介紹!

缺點在後期,後期專案較大後,打包越來越慢,打個包 10  多分鐘,這在更新頻率非常高的公司,完全無法忍受,只能整體編譯,無法區域性編譯。

   

     前段時間一直在研究如何達到這一目的(快速編譯、打包、部署),在瞭解的過程中,慢慢有了一套完整的解決方案,來處理 play 的這個弊端。今天將近期的瞭解的整理成文章分享給大家,希望能幫到在這方面有同樣困惑的朋友。


在上篇文章(http://blog.csdn.net/fasttime/article/details/50814716)

中介紹了打包的幾種方式,其中第 2 3點可用於區域性更新,比如第 3 點我們可以傳入自己的引數進去,

比如: 部分 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]