Maven是一个非常优秀的工具,在Maven出现之前,一个项目如果业务很多,很复杂,整个项目就非常庞大。这会造成如下几个问题:
1、项目后期维护成本大,新加一个需求需要全盘考虑会不会影响其他的业务逻辑;
2、开发效率低下,改动一个Java文件需要重启Tomcat (Jetty等)服务器 ,重新编译整个项目,编译会花去一定的时间,程序员开发的时间会大大减少;
3、所有的业务代码和非业务代码紧密耦合在一起,无法拆分;
4、jar文件冲突,不同的业务代码依赖jar的版本无法做到统一。
Maven出现后,很好的解决了上述问题。使用Maven后,一个大的项目被拆分成小的模块,这样程序员可以专注于某个模块,开发效率大大提高。同时程序员改了某个模块后,只需编译这个模块,这样减少了编译时间。Maven也很好的管理jar,所有的jar可以通过自己构建私服统一管理,冲突问题得以解决。
写到这里也许你会问,Maven似乎已经实现分模块编译和打包的功能,实现了热部署,还要在Maven上做什么文章?确实,Maven解决了“热部署”。一般情况下不需要再做什么文章了,分模块已经大大的提高了开发效率。如果一个项目拆分成几个模块后,模块不能继续再分了(模块分的越多也不是很好,不便于管理),但是模块还是很大,这时候有点问题了!!
于是就有人提出,JVM每次编译Java文件只编译.class文件改动的文件,这样会提高JVM编译效率。JRebel插件是其中一种,可以监控哪些Java文件被修改过,原理就不叙述了,可以百度相关文章阅读。
本文只讨论Maven插件(
Tomcat + JRebel)实现Web项目热部署(增量部署)功能。其他插件如Jetty也可以实现热部署,Maven的配置类似,本人也成功使用Jetty插件实现热部署,鉴于篇幅原因,这里就不在赘述。开发中选择Tomcat还是Jetty依项目而定,不过
一般推荐使用Jetty插件,Jetty比Tomcat 更轻量级,大多数情况下Jetty完全可以满足需求。需要注意的是,JBoss插件的支持不是很好,目前本人未能成功用JBoss插件实现分模块打包,如果你实现了用JBoss插件分模块打包,并可以正常的运行项目,欢迎分享给大家。
好了,开始进入正题,Tomcat + JRebel 插件实现热部署。
1、配置编译插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
2、配置打源码插件(可选项):
<plugin>