1.前言

  首先,本文创作灵感源于博客园园作者signheart,特此鸣谢!原文链接见文末推荐;

  百度都搜破了,全网讲的都是如何将maven项目部署到tomcat上,对于热部署的认知,真是令人汗颜!

  其次说说热部署的含义:

  热部署原来被定义为:tomcat启动后,如果你往webapps目录下,添加新的项目,tomcat会实现自动将其发布的功能,这时,就叫做热部署。

  网上所实现的热部署,也是这样:通过修改pom.xml,利用maven插件,运行tomcat7:run命令自动将maven项目进行打包,并发布到tomcat上。

  纯JavaWeb项目对热部署的定义为:修改Java文件和其它文件不需要重启tomcat,可以即时生效。

  本文将带你一步一步实现真正的热部署!

2.情景展示

  maven项目标准目录结构展示

  maven项目Java文件的默认编译位置 

  在eclipse中,MavenWeb项目如何实现热部署?

3.错误方式

  手动修改maven项目的class文件的默认输出位置

  第一步:将class文件的编译位置:demo_WebService2/target/classes,统一改为:demo_WebService2/src/main/webapp/WEB-INF/classes;

  第二步:采用了"Default output folder"(选中"Allow output for source folders"可以看到);

  第三步:Tomcat热部署访问:D:\WorkSpaces\eclipse2016\demo_WebService2\src\main\webapp;

  虽然项目也可以正常启动并运行,但是这样的弊端有二:

  其一,无法单独运行Java类,强制运行时,会报错:找不到或无法加载主类;

  其二,不能更新maven项目,一但更新maven项目,就会导致class文件的默认位置还原为target/classes目录下。

  什么时候需要更新maven项目?pom.xml更改后,必须更新,否则不生效。

4.解决方案

  修改pom.xml改变修改maven项目的lass文件的默认输出位置。

  改动一:更改maven默认的打包目录

  在plugins标签体内添加

<!-- 更改maven默认的打包目录 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${project.basedir}/src/main/webapp</webappDirectory>
<warSourceDirectory>${project.basedir}/src/main/webapp</warSourceDirectory>
</configuration>
</plugin>

  改动二:更改class文件的编译位置

  在build标签体内添加

<outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>

  第三步:保存并更新maven项目(Alt+F5)

  选中项目-->右键-->Build Path-->Configuire Build Path

  class文件的输出位置已经变更至WEB-INF下(测试除外)

  第四步:修改server.xml

  Server工程-->打开要热部署项目所对应的tomcat的server.xml文件  

  在Host标签体内添加Context标签,指定项目发布位置,及访问路径

  第五步:以debug模式运行项目即可。

  第六步:网页访问

  

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

eclipse mavenWeb项目真正实现热部署(修改java代码和页面文件不用重启tomcat)的更多相关文章

  1. IntelliJ IDEA 热部署,修改java文件 不用重启tomcat

    详情见大佬:https://www.cnblogs.com/chenweichu/articles/6838842.html

  2. 如何免费使用jrebel 和eclipse 项目配合完成热部署功能

    天,感谢王同学分享了热部署插件,jrebel,说修改后台代码可以不用重启tomcat,于是立即下载使用....本来很简单的一个事情,因为参照了网上各种帖子,结果坑的不行....所以把自己的经验分享一下 ...

  3. eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究

                    1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...

  4. Eclipse下JRebel6.5.0热部署插件安装、破解及配置

    发现一个问题:如果安装了jRebel,但是并未对项目添加jRebel监听时,如果重写jar包中的类, 虽然重写后的类会得到编译(classes中的class已经是修改后的class),但是并不会调用重 ...

  5. 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置【转】

    标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ...

  6. SpringBoot实现热部署(修改class不需要重启)

    热部署: devtools可以实现页面热部署(即页面修改后会立即生效, 这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实 ...

  7. 160614、Eclipse下JRebel6.2.0热部署插件安装、破解及配置

    标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ...

  8. 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置

    这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次,耗在各种 ...

  9. 热部署简介及在eclipse安装插件JRebel进行热部署

    一.热部署简介 1.热部署与热加载在应用运行的时候升级软件,无需重新启动的方式有两种,热部署和热加载.它们之间的区别是:(1).部署方式: 热部署在服务器运行时重新部署项目.热加载在运行时重新加载cl ...

随机推荐

  1. sklearn中SVM调参说明

    写在前面 之前只停留在理论上,没有实际沉下心去调参,实际去做了后,发现调参是个大工程(玄学).于是这篇来总结一下sklearn中svm的参数说明以及调参经验.方便以后查询和回忆. 常用核函数 1.li ...

  2. head first--------------state pattern

    head first----------浅谈状态模式     状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类     实现代码如下:      package com.cl ...

  3. api重复引用导致的诡异问题排查

    api重复引用导致的诡异问题排查 最近一个项目上线前开发环境.测试环境都能正常打包并运行.然而到了准生产环境和生产环境则报一些诡异的错误信息: [INFO] --------------------- ...

  4. [leetcode]Remove Duplicates from Sorted Array II @ Python

    原题地址:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array-ii/ 题意: Follow up for &quo ...

  5. iOS开发-UIScreenEdgePanGestureRecognizer实战

    UIScreenEdgePanGestureRecognizer名字很长,而且关于其文档也是少的的可怜,苹果官方给的唯一的一个属性是edges,文档中的解释是这样的: A UIScreenEdgePa ...

  6. Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. An attempt was made to load a program

    今天同事在一个服务器(winserver 2008 x64)上新建了一个IIS(7) 网站,但是报了如下错误: Could not load file or assembly 'System.Data ...

  7. jquery 控制css样式

    一.CSS 1.css(name) 访问第一个匹配元素的样式属性. 返回值 String 参数 name (String) : 要访问的属性名称 示例: $("p").css(&q ...

  8. redis调优 -- 内存碎片

    最近查看了一下redis运行状况,发现公司测试服务器的redis内存不太够用,但是实际占用内存的数据量其实不大,以前也没有这种情况,之前在cache层新增了一个防刷积分任务的逻辑才会这样,搜索一下原因 ...

  9. TensorFlow练习7: 基于RNN生成古诗词

      http://blog.topspeedsnail.com/archives/10542 主题 TensorFlow RNN不像传统的神经网络-它们的输出输出是固定的,而RNN允许我们输入输出向量 ...

  10. mongodb自动关闭:页面文件太小,无法完成操作

    在一台两G内存的win server 2008电脑上运行一个程序,一段时间后mongod自动停止,发现日志文件最后有这样的错误: 2014-11-30T00:32:32.914+0800 [conn3 ...