使用tomcatPlugin配合JRebel解决maven项目依赖war的打包和热部署的问题

一、问题出现

事情是这样的,原本我们web项目每一个都是独立的,顶多是依赖一些打包为jar的公共项目模块,但是webapp下的资源文件还是独立的。但是,由于我们自己封装的框架包含着一部分公共的前端资源文件(js、css、img等)和页面模板,当web项目多了,文件冗余自然就多了,如果框架需要调整修改,那得每个项目都要改一遍,那不是烦死?所以,我们决定想办法把这部分文件也要抽取出来,像jar包一样需要用到就通过maven依赖进来就行了。但是,这些在webapp下的文件应该是一个web项目的结构啊,那应该是编译成war包,也就是说war包需要依赖war包。然后听老大说maven3以上是支持war依赖war的(maven真不是盖的,gradle不要欺负人家),所决定重构一下项目(重构这个词挺吓人的)。。。

问题出来了,我们原来使用的tomcat7-maven-plugin插件运行(tomcat7:run)项目时,居然没有把所依赖的war给打包进去!项目是跑起来但是页面是裸奔的啊。。。(因为核心的js、css等都找不到)但是使用maven的install命令打包出来的war是有包含所依赖的war的内容的。那就奇怪了,一定是tomcat7-maven-plugin搞的鬼,然后找了很多相关的配置资料,心想应该是overlay的配置问题,找了很久试了N遍还是不行(反正是没解决,不要找借口也不多说了),但是其他的兄弟还要开发调试呢,我这个分支也急需合并到主分支,所以只能另辟蹊径了。

二、问题分析

既然install打包是正常的,那我使用外部的tomcat来部署应该是没问题的,马上下了个tomcat,先把生成的war扔进去跑一下再说,噔噔噔果然没问题。OK,那么使用Eclipse绑定外部的tomcat,解决debug调试,配上虚拟路径,再顺便把JRebel
6配上去(之前JRebel 5 配上但是有bug有时会失效,听说JRebel 6 修复了)实现热部署,只要修改完成后重新install一下,不需要重启tomcat,也是个不错的解决方案~只是以前修改网页资源文件都可以立即更新,现在需要install一下了(非“Hot Code”代码不用install也会重新加载),但这也是没办法的办法了。不要问为什么不用自带的tomcat server,我们用的是Eclipse javase版本(当时装错了哈哈哈,哭),而且我们也试过tomcat
server和tomcat7-maven-plugin一样没有把依赖的war打包进去,于是在网上找到了tomcatPlugin这个插件,下了个最新版本V331,再下个JRebel
6.3.0,可以开始干了。

tomcatPlugin下载:http://www.eclipsetotale.com/tomcatPlugin.html

JRebel 6.3.0(破解的你懂的)

三、解决步骤

1、装好tomcatPlugin插件(离线安装,放入Eclipse的plugins目录即可),重启服务器后就出现了下图中的按钮:

2、进入Window->Preferences->Tomcat中,绑定下载的tomcat,别忘了在Server.xml或Catalina/localhost中配上虚拟路径指向target中的web项目。

3、进入JVM Settings把下载好的JRebel配上,点击一下【Create a launch Configuration】(你可以不点试试,我一上来就点了,也没试过不点行不行 = = 在同事的机器上没点貌似是不行的),根据自己的文件路径配好。因为JRebel是JVM插件,所以是配在JVM参数的-javaagent参数中,红框下方的参数是只配了上方参数运行时,JVM提示必须加上的,具体作用我这里就不深究了。

4、把项目的源文件绑定上,才可以debug调试。

5、把项目都install好,点击【Start Tomcat】成功启动没有报错,启动过程中出现下方日志,则代表绑定上JRebel了:

6、修改一下log4j.xml再重新install,出现下方Reloading configuration则说明JRebel热部署已经生效了,赶紧打个断点调试起来吧~

四、总结

其实热部署也没那么热,当修改到一些“Hot Code”时,JRebel是不会重新加载代码的,但是至少修改一些配置文件还是不用重启的,甚至是修改了一些依赖的jar项目的代码也不用重启哦。

解决方案有很多种,这种一定不是最好的解决方案,但是重要的是有没有解决好问题,还有解决问题的思路,最后就是挑选最简单最适合团队的解决方案了。这次深刻体会到集成开发是有多么伟大,假如所有的工作不使用Eclipse、maven、JRebel等工具插件进行开发,从编码和编译到调试和部署,起码多出10倍的工作量!所以,优秀的程序员就应该使用计算机自动化完成重复的工作,less
is more!

最后,如果博文有错误的地方,恳请指正;如果有更好的思路和解决方案,跪求分享;如果有好的想法,欢迎交流!

时间: 2024-11-05 14:43:11

使用tomcatPlugin配合JRebel解决maven项目依赖war的打包和热部署的问题的相关文章

解决maven项目 maven install失败 错误 Failed to execute goal org.apache.maven.plugins

1.Maven构建失败 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin: 2.3.4 :compile ( default -compile) on project oecp: Compilation failure 2.解决方法:使用自己的jdk,记住是jdk,因为jdk里本身包含jre.而不是单纯的jre.本人初学者,表达肤浅,请看勿笑. 解决maven项目 maven install失败 错误 Fa

maven exclusion 解决maven传递依赖中的版本冲突

传递依赖是maven最有特色的.最为方便的优点之一,可以省了很多配置.如a 依赖 b,b 依赖c 默认 a也会依赖 c.但是也会带来隐患,如版本冲突.当然maven也考虑到解决办法,可以使用exclusions来排除相应的重复依赖. 但是我们还会遇到一个严重的问题,那就是,我怎么知道是哪个包的传递依赖产生的冲突 ?那该怎么办呢?当然,maven也会有相应的解决方案. 首先,你要在pom.xml中加上maven-project-info-reports-plugin插件. <reporting>

解决maven项目无法读取src/main/java目录下面的配置文件问题

我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的mapper.xml文件. 简单的解决方法如下: 第一种: 将xml文件移至src/main/resource下面,这样做最省事,但是面临一个问题,就是看起来项目整体结构不清晰,不统一,层次感不好,那么我们看下第二种. 第二种: 我们需要在pom.xml文件里面去配置一下,让项目启动的时候能够去读取到s

tomcat没有发布maven项目依赖的本地jar包

开发工具:STS(Spring Tool Suite) 建立springMVC的maven项目,平时使用的jar包都是在pom.xml文件配置依赖关系, maven会自动从仓库中下载,这样使用tomcat部署发布都没有问题.但有时我们需要使用maven仓库中不存在的包,这就需要自己配置. 右键单击工程名—>Build Path—>Configure Build Path—>Java Build Path—>Add JARs/Add External JARs,将需要的jar包加进去

解决maven项目Invalid bound statement (not found)的方法

用IDEA 做的ssm 的maven项目,登陆时出现上图问题. 原因是它读取不到DevUserMapper.xml文件和取它xml文件,后面查询在编译好的文件中,xml文件并没有引入进来,这就是导致出现这个问题的原因. 解决方法: 在pom.xml文件中的<build>标签中添加以下代码: <resources> <resource> <directory>src/main/java</directory> </resource> &

解决maven项目构建过慢的方法

解决在使用IDEA构建maven项目是项目加载过慢,可以在创建项目时在如图位置添加一组参数即可 archetypeCatalog参数,并将值设置为internal 原文地址:https://www.cnblogs.com/lalala1874/p/11441825.html

ecplise 导出maven项目依赖的jar

1.选中需要导出jar的项目,鼠标右击--->run as----> maven bulid 如下图: 2.在Goals中输入:dependency:copy-dependencies 点击 Apply-->Run 成功后target 目录下回多出dependency 目录.目录中即是项目依赖的jar 原文地址:https://www.cnblogs.com/wujiaofen/p/11286557.html

SpringBoot项目在IntelliJ IDEA中实现热部署

spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快.其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个resta

解决Maven下载依赖慢的问题(转)

使用Maven构建项目时,项目中有的依赖包可能下载的非常慢,我们可以通过配置镜像来解决这个问题. 之前开源中国的那个好像已经关闭了,于是我找到了一个阿里的来解决. 在Maven的配置文件(%MAVEN%/conf/setting.xml)中的< mirrors> 标签中加入 <!-- 阿里云仓库 --> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <