play1.2.7局部编译,局部打包完整解决方案

来源:互联网 发布:丰城市网络问政网奔驰 编辑:程序博客网 时间:2024/06/05 19:22

   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后局部更新包生新器才会起作用


如还无法运行可联系: zxiaohui@vip.qq.com


0 0
原创粉丝点击