文书先生:闻书起舞,愉乐人生关于maven热部署的问题:
1、使用maven直接向tomcat实现热部署
2、maven不分模块的时候,可以使用tomcat自带的插件设置热部署3、jetty的测试结果
文书先生:闻书起舞,愉乐人生1、使用maven向tomcat实现热部署
方法:(a)配置java环境变量(b)配置tomcat环境变量(c)配置tomcat的user:打开conf下的tomcat-users.xml添加如下用户有人说这个password可以为空,不用设置(d)增加maven插件,如下:org.codehaus.mojotomcat-maven-plugin1.0-beta-1http://localhost:8080/manager/htmltomcat(e)先启动tomcat,然后在项目中执行packagetomcat:redeploy,在浏览器中就可以运行项目了2、maven不分模块的时候,可以使用tomcat自带的插件设置热部署
按照以下配置tomcat插件:org.apache.tomcat.maventomcat6-maven-plugin2.1/demotruePath对应的应该是工程目录名称:如http://localhost:8080/demo/index.docontextReloadable:用来确定是否要使用热部部署,默认为false按照以上配置,重启maven项目后,在类内新加方法,修改参数的时候都不需要重新启动了,没有式过修改xml还要不要起动。文书先生:闻书起舞,愉乐人生当前模块使用tomcat热部署,其它模块如果有修正可以通过deploy方式进行重新提交,这样也可以达到热部署的效果,有一点不好的是每修改一处地方他就会重启(更新)服务,这个就造成控制台不停的闪,还有一点不好的,服务器很容易崩溃。3、maven-jetty插件热部署
Jetty是一个定时执行任务的容器,它可以代替tomcat来支行项目。但经过测试,还是无法满足分模块的热部署,下面把过程描述一下:Webapp模块加入一个maven-jetty的插件:如下org.mortbay.jettymaven-jetty-plugin6.1.2638083src/main/webapp/WEB-INF**/*.jsp**/*.properties**/*.xml文书先生:闻书起舞,愉乐人生上述主要的scanIntervalSeconds用来设置时间的间隔。Port用来定义新的端口。scanTargetPatterns用来定义扫描路径和文件类型,excludes表示以外的。用使maven运行:org.mortbay.jetty:maven-jetty-plugin:6.1.26:run如果想打断点,使用debug模式运行即可,tomcat就不需要起动了注:经过用了一天来测试maven-jetty这个插件,发现了几下几个问题:1、当jetty检测到你扫描的目录发生变化的时候,它将会给你重启jetty服务,这样照成的结果就是相当重启一遍服务器。效果很恶劣,可以设置为手动控制模式,可以解决这个问题。2、在我测试多模块(一个项目)自定义扫描的时候,本来在官方说明的、是都可以自定义的,但我操作死活没有成功,在使用,匹配了如下代码:${output.project.path}/back/src/main/java${output.project.path}/manage/src/main/javaD:\\Users\\admin\\workspace\\ailebaba这是项目父模块的目录,其中back,manage是子模块的目录,在扫描这个配置的时候,如以下代码:${output.project.path}/back/src/main/java**/*.java${output.project.path}/manage/src/main/java**/*.java文书先生:闻书起舞,愉乐人生这个居然可以扫描成功,back和manage是两不同的模块,但当这模块发生变生的时候,jetty服务就会重启,很遗憾的是,重启后并没有把最新生成的class文件布置上去,重启后的还是旧的...由以上推测一些jetty的功能:1、jetty虽然可以定义扫描目录,但启新布置的时候应该是用的当前的项目,也就是说,只要符合单项目操作的应该是都可以,以下的情况是失败的情况:注:后来这个这个问题解决掉了,解决掉之后反而上面的分模块是最适合的了,详细的解决方法在另一文章“说于maven插件jetty详解.doc”以下两种情况可以使用:2、Jetty虽然支持热部署,但在势部署的时候必须会重启服务,重启服务将会清空参数,比如session,所以设置为自动热部署并不一定可行,如果是登陆帐号势必会每次重新登文书先生:闻书起舞,愉乐人生陆。它支持手动启动热部署,这个功能应该是为弥补上面所说而加的,只需要在控制台输入一个回车就搞定,还是很方便的