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
- play1.2.7局部编译,局部打包完整解决方案
- Play1.2.7 完整打包,超级缩短完整打包所耗费的时间
- Play1.2.7导入Eclipse
- 错误:返回局部变量数组名 \ 解决方案
- 一种局部ui界面切换解决方案
- 局部杀敌
- 局部刷新
- 局部变量
- 局部减肥
- 局部缓存
- 局部刷新
- 局部更新
- 局部变量
- 局部对象
- 局部缓存
- 局部缓存
- 局部变量
- 局部刷新
- 版本控制
- 深入理解Java的接口和抽象类
- OC_KVO、notification和Block实现保姆小孩间的通信关联
- 高性能Mysql:B-TREE和B+-TREE
- ibmm,让思维导图回归本质
- play1.2.7局部编译,局部打包完整解决方案
- 二维码扫描
- java.text.SimpleDateFormat多线程下的问题
- 不知乘月几人归,落月摇情满江树
- CSS的选择器
- HDU 5630 Rikka with Chess
- 第一篇博客,没有干货
- xampp安装中出现的问题
- linux rpm命令使用方法