IntelliJ+AntBuild+Tomcat实现Maven站点的热部署
这段时间要研究WebGL技术,做一下三维建模项目,涉及到较多的前端编码。eclipse编译器那令人着急的编码提示功能,以及丑恶的界面对项目的开展造成了一定的阻碍。为解决这个问题,转向IntelliJ Idea这款IDE,下载了最新版,完成破解,开启新征程。
历史证明摸着石头过河,总是要喝两口水的。征服之路:一、创建多模块的Maven项目,与eclipse建项过程差不多,略过不提;二、通过Tomcat发布web站点后,怎样实现文件的热加载,即实时同步。这个问题比较蛋疼,网上一般提到的说法就是Tomcat在build时,发布展开的war包,即war exploded模式。但是我按照网友介绍,进行了一系列设置后,发现我的webapp文件编辑后不能很好的同步更新。js文件还成功了几次,freemarker文件压根没反应,过了一晚上再看,连js的更新也没有了。折腾了半天也没个结果,有网友说用Jrebel插件,可这玩意儿要收费,尝试着破解后发现还不能与IDE兼容,无奈放弃。后来考虑直接把webapp资源拷贝到发布目录吧,为此选择了Ant Build方式。接下来,我就以这个建设的项目为例,讲解下自己的web资源热加载实现过程。
一、多模块Maven项目的结构展示
参考:理解 IntelliJ IDEA 的项目配置和Web部署
Project Structure > Project Setttings > Artifacts:项目打包设置方案中添加web站点的两种打包方案,war是以生成war包再部署的方式发布,war exploded是通过生成展开目录架构的文件夹的方式发布。
war exploded在文件更新自动同步时起作用,不必每次都打war包。

二、配置Tomcat运行方式
参考:IntelliJ IDEA14 + tomcat 设置热部署


三、配置Ant Build构建方案,同步项目资源文件到Debug的发布目录下
1、我在web项目根目录下添加一个build.xml的ant配置文件,配置中添加一个策略,将src/main/webapp/目录下的文件拷贝到发布目录 target/train-simulate-web-1.0-SNAPSHOT/ 下。project.basedir属性设置为".",指向配置文件所在的根目录。这里需要说一下,debug模式下,tomcat直接运行的是war exploded发布输出的目录。

<?xml version="1.0" encoding="UTF-8"?>
<project name="" default="fileCopy" basedir=".">
<property name="webapp_dir" value="src/main/webapp/"/>
<property name="to_tomcat" value="target/train-simulate-web-1.0-SNAPSHOT/"/>
<target name="fileCopy">
<copy todir="${to_tomcat}">
<fileset dir="${webapp_dir}"></fileset>
</copy>
</target>
</project>
2、将Ant Build的拷贝策略附加到项目的编译动作上(自动化实现的重要步骤)。我这里设置的是在编译前执行Ant构建。这一步设置完成后,结合Tomcat配置中的update classes and resources设置。每次执行update操作或从IDE上失去焦点,都将触发项目的build操作,build操作再触发Ant构建的执行,从而达到web资源的实时更新目的。

小结:
配置到这里,web项目的资源文件,class文件都能够实现自动化的更新部署了,不必每次更新都去人为的重新发布。效果上凑合可以满足我目前的心理需求底限了。不过这种搞法,还是无法解决web外的其他jar包模块的自动发布问题,因为jar项目修改后,需要打包成新的jar包,替换到tomcat发布目录下。但是实际上在debug模式下,jar包文件被进程占用,是没办法重新替换的。这种情况,就只能重启DEBUG调试了。假如我对IDE的理解有误,事实上有更好的方案来处理热部署问题,欢迎留言告诉我一声!
IntelliJ+AntBuild+Tomcat实现Maven站点的热部署的更多相关文章
- idea maven jetty插件热部署
maven tomcat插件好像无法进行热部署,jetty可以如下配置实现热部署,但是idea无法进行自动编译,所以需要如下快捷键 Ctrl+Shift+F9,编译 Ctrl+F9,生成项目 < ...
- tomcat重启应用和tomcat重启是两回事。热部署就是重启应用
tomcat重启应用和tomcat重启是两回事.热部署就是重启应用 tomcat重启应用和tomcat重启是两回事.热部署就是重启应用 tomcat可以设置检测到新的class后重启该应用(不是重启t ...
- maven+tomcat6-maven-plugin实现热部署及调试
maven project,特别是maven module项目默认情况下是是无法直接通过tomcat等容器部署的,如图,我要部署fastdev_web这个maven module,可以看出在tomca ...
- maven tomcat7 远程热部署
在maven项目开发中,一般推荐使用jetty进行开发调试.但是在项目发布的时候要求使用tomcat7作为发布服务器,为此在maven中配置了tomcat7插件,以支持项目在外部tomcat7进行远程 ...
- maven实现项目热部署
1.Tomcat的配置 我们需要实现热部署,自然就需要通过maven操作tomcat,所以就需要maven取得操作tomcat的权限,现在这一步就是配置tomcat的可操作权限. 在tomcat的安装 ...
- jenkins+maven+Tomcat8实现热部署
个人记录 公司使用jenkins实现代码自动更新并部署 采用jenkins安装方式为war包,版本为:2.138.3,启动方式为Tomcat启动jenkins, 该博客操作步骤有些地方进行简化,各位需 ...
- 使用maven的tomcat:run进行web项目热部署
近期又又一次看了一下maven的东西,事实上主要是由于去了解Jenkins,后期或许会补充jenkins的博文. 怎么在eclipse里面创建maven webproject,这边就不介绍了,參见:h ...
- IDEA Maven Jetty Jrebel 热部署
准备:1.下载Jrebel的离线安装包,版本是6.4.3版本. 2.下载Jrebel的破解补丁包,同样也是针对6.4.3版本的 Jrebel离线安装包官网下载地址:https:/ ...
- tomcat使用spring-loaded实现应用热部署
springloaded官方说明: Spring Loaded is a JVM agent for reloading class file changes whilst a JVM is runn ...
随机推荐
- webpack学习(一)—— 入门
,我们通常采用的是组件化开发方式,这样就会对应有很多个js文件,而打包工具的出现则是为了正确处理这些js文件的依赖关系,并生成一个最终的文件,这样,我们最后只需要加载打包以后的文件就可以了,而无须加载 ...
- TP中登录验证
loginpro 1.建立控制器 loginController.calss.php <?php namespace Admin\Controller; header('Content-type ...
- Git在不同环境换行符设置
首先我们在eclipse查看两个环境文件的换行符区别: 产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫 ...
- What makes an inferred latch? how To avoid creating inferred latches? when do you know you need latches?
What makes an inferred latch?For combinatorial logic, the output of the circuit is a function of inp ...
- Azure上通过haproxy实现APP Gateway或WAF的http跳转https
Azure上的APP Gateway是七层负载均衡服务,WAF是APP Gateway服务的扩展.在实现七层负载均衡的同时,增加了WAF的功能,可以对后台的HTTP服务进行保护. Azure WAF采 ...
- 四、ABP 学习系列 - 配置Swagger
一.再XX.Web项目中用Nuget安装Swashbuckle.AspNetCore.SwaggerGen和Swashbuckle.AspNetCore.SwaggerUI 二.在Startup.cs ...
- SpringCloud组件的简单介绍
springcloud官网springcloud中文网站 最近开始接触springcloud,所以先了解了一下最最基本概念. Spring Cloud ConfigSpring配置管理工具包,让你可以 ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- 2016.5.30让窗口处于最顶层的方法,比TopMost灵活
最简单的方法Form. Activate() 稍复杂的方法用API,目前没有看出比第一种方法有什么好处(可操作其它窗口,这就是好处2016.7.31) [System.Runtime.InteropS ...
- 重命名File
File completeFile = new File(mFilePath + mFileName); if (completeFile.exists()) { File fileWithSuffi ...