在Maven项目中实现热部署
wangyq
使用maven作为项目管理工具,以jetty-maven-plugin插件作为内置的J2EE容器进行web项目开发,在很多时候需要实现项目代码的热部署,包括java编译后的class文件,Css\Js\Html等静态资源,视图模板如FreeMarker、Velocity、Httl等,都需要实现热部署,下面讲解下实际开发工作中的解决办法:
1、使用 jetty-maven-plugin插件作为项目内嵌容器的话,是没法直接使用Myeclpse10自带的Servers面板中的部署功能,这时为了避免每次自己手动去执行“Run as -->Maven build-->clean compile package...”等命令,需要自己配置一个外部工具来提供一个快捷的启动方式,配置步骤如下:点击菜单“Run-->External Tools-->External Tools Configurations”,
在Main标签中输入Maven的安装目录地址,Arguments中填入"Jetty:run"的命令,Working Directory选择当前正在开发的项目,在Environment标签中,添加MAVEN_OPTS标签,标签值为“-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4010,server=y,suspend=y”,解释下suspend=y表示当遇到代码中打的断点时挂起当前线程以进行调试,Server=y表示已服务器模式运行(相对于client模式),addres=4010表示通过该端口对提供监听(4000端口会被QQ占用不推荐),-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:transport指定了调试数据的传送方式,,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。然后在Commen标签中,选中Display in favorites menu(External Tools),这样该工具就会在控件工具栏中显示出来,可以直接点击使用了;
2、使用maven管理项目的时候,需要通过调用remote java Application实现对本机上运行的maven项目的运行监控,需要配置的过程如下,选中项目右键-->Debug AS-->debug configurations 后在面板中选择“Remote Java Application”新建一个配置:
在port中设置和MAVAEN_OPTS中相同的端口号,在Commen标签中选择在Display in favorites menu(Debug),就可以了;
3、设置Jetty的一些参数,以实现热部署;Jetty启动时候需要读取webdefault.xml文件的内容,在webdefault.xml定义useFileMappedBuffer为false即可实现(开发时建议设为false,正式运行的时候建议设为true以提高系统响应速度),另外建议将 <locale-encoding-mapping>中zh的编码也设置成UTF-8(默认是GBK,有时候会出现乱码);该xml文件提供在附件中了,用户可以自己去jetty的jar包中找该文件修改下参数值就可以了;修改完成后,将该文件放在src/main/resources/下面,然后在POM.XML中配置该文件:
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.12.v20130726</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webAppConfig> <contextPath>/gtcloud</contextPath> <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor> </webAppConfig> </configuration> </plugin>
这一步实现完成后能完成对静态资源(CSS\JS\IMAGE等)的热部署;如果需要实现对class文件的热部署,还需要在之前的外部工具的环境变量中添加参数,在MAVEN_OPST中继续添加“-Djetty.reload=automatic -Djetty.scanIntervalSeconds=5”以实现对java文件的热部署;
4、另外还有一些模板文件如Velocity\Freemarker\Httl等,因为存放位置是在WEB-INF/templates下面,很多时候文件改动也不能实现热部署,这时候需要结合具体的模板来修改,比如Httl(这是淘宝推荐使用的视图模板技术)可以在MAVEN_OPTS中继续追加参数“-Dhttl.reloadable=true”来实现,其他的模板基本实现也都差不多;
最终的MAVEN_OPTS中的参数值为:“-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4010,server=y,suspend=y -Djetty.reload=automatic -Djetty.scanIntervalSeconds=5 -Dhttl.reloadable=true”;
5、最后一步验证以上步骤是否正常,启动服务(启动外部程序实现对指定端口的监听),然后在启动Remote Java Application来实现运行监控;
点击按钮后console会打印Listening for transport dt_socket at address: 4010 的提示信息
点击后会使出容器启动信息和项目信息;这时候更改任何文件,刷新页面,页面都会显示出最新效果~
结合上面4个步骤,项目中所遇到的所有文件的修改都能实现热部署了,也不用借助于JRebel等插件提供的额外功能,一切都是这么滴简单~~~
--------------------------------------
ps:不好意思,我之前上传的附件中没有把webdefault.xml的配置文件放上来,抱歉啊,现在补上了;class文件的自动加载实际上是有赖于这个xml文件的。
相关推荐
适用于Java后台开发Tomcat热部署使用者,包括Java环境的搭建、Tomcat的安装,以及Maven工程中热部署的配置
在用maven项目的时候,很多时候不想去再把项目部署到Tomcat上,然后发布并启动,这个时候我们就可以运用Tomcat热部署来配置,只需要再maven的配置文件加上一小段代码即可,非常方便! 启动的时候直接:右键项目--...
eclipse + maven多模块项目框架 + jetty热部署的实例源码 让你掌握maven中那些令人迷惑的一堆配置,基于此框架快速搭建maven多模块项目完美环境。
maven的项目用jetty 服务器启动项目时配置此段配置,就可以实现热部署(意思就是eclipse改了代码可以不用重启服务器)
使用maven 对java程序编译构建,打包和部署。自动化部署
maven项目的热项目,就是在tomcat启动的情况下, 服务器nginx 反向代理 负载均衡
Intellij IDEA下建立maven管理的web项目,配置jetty热部署
IDEA配置热部署IDEA配置热部署IDEA配置热部署IDEA配置热部署
利用maven创建Web项目,并在eclipse测试部署web项目
Maven 安装插件 glassfish 热部署 加快glassfish 开发速度 图解 自己总结的,有什么不足的请指出
NULL 博文链接:https://bruce-yj-hotmail-com.iteye.com/blog/1973506
主要介绍了SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
主要介绍了IntelliJ IDEA使用maven实现tomcat的热部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
NULL 博文链接:https://zheng12tian.iteye.com/blog/1772330
Maven +Tomcat+m2eclipse的热部署(hot deploy)
NULL 博文链接:https://xunclapton.iteye.com/blog/795561
应网友要求,重新整理原《eclipse + maven多模块项目框架 + jetty热部署的实例源码》,增加了各配置的详细注释。 并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,...
主要介绍了maven tomcat plugin实现热部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
maven热部署,常用jar包,maven热部署,jdk版本,全局jar包版本控制,使用方便!!!!