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 ...
随机推荐
- String format方法的应用
String str=null; str=String.format("Hi,%s", "小超"); System.out.println(str); str= ...
- 七、python沉淀之路--集合
一. 1.字符串转集合 s = 'hello' se = set(s) print(se) {'e', 'o', 'h', 'l'} 2.列表转集合 l1 = ['hello','python','n ...
- 【转】JVM可视化工具插件---Visual GC
Visual GC是一个Java 内存使用分析与GC收集的可视化工具插件 <插件下载> 一:整个区域分为三部分:spaces.graphs.histogram 1 spaces区域:代表虚 ...
- python之 前端HTML/CSS基础知识学习笔记
1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </ht ...
- redis之 Redis常用数据类型
Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令: set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...
- CF 949C Data Center Maintenance——思路+SCC
题目:http://codeforces.com/contest/949/problem/C 可以想到可能是每组c有连边的可能. 但别直接给c1.c2连边,那样之后会变得很不好做. 可以把一些限制放在 ...
- DropShadowEffect导致下拉框控件抖动
<!--<Border.Effect> <DropShadowEffect Direction="180" BlurRadius="1" ...
- git ssh登录
.ssh下创建config文件 其内容: Host ipIdentityFile ~/.ssh/私钥文件名Port 22User git服务器的账号,不是git账号名(私钥文件名才是git账号名) 注 ...
- Angular5学习笔记 - 项目目录结构(二)
一.项目总体目录 README.md:项目的说明和一些常用指令说明,建议看看. e2e:看不懂暂时空着??? node_modules/:存放npm下载的组件(npm install 后自动产生,不需 ...
- MySQL/InnoDB tips & tricks
本文讨论的是 MySQL 5.7. 1.混用 * 和列名会产生解析错误,要避免这个错误,要使用 tbl_name.* 的格式. 2.where 子句中不能使用 select 中定义的别名,因为 SQL ...