IDEA编译项目后,target目录下的jsp文件不更新
tomcat目录说明
先来看一下tomcat的目录:
|-bin
|-conf
|-lib
|-logs
|-temp
|-webapps
|-work
tomcat 的核心是servlet容器,叫 catalina。
其中以下目录是 tomcat 的核心目录,也就是 catalina 目录
|-conf
|-logs
|-webapps
|-work
剩下的目录是 tomcat 的 外部程序。
|-bin
|-lib
|-temp
执行 /bin/startup.bat ,内部调用了 /bin/catalina.bat 。catalina.bat 通过变量 CATALINA_BASE 确定 catalina 目录位置(默认是当前的tomcat目录)。
IDEA启用Tomcat
IDEA 就是通过设置 CATALINA_BASE 变量,指定 catalina 目录的位置。在启动TOMCAT时,控制台中都会打印出
USING CATALINA_BASE: "...."
这样的日志。打开这个目录,就可以看到 conf、logs、webapps、work 目录一个不少。
通过这种复制 catalina 目录,tomcat 就能启动多个servlet容器,即多个javaweb项目。
如果项目没有使用 maven,那么运行的项目就保存在 CATALINA_BASE/webapps 下。如果使用了maven,那么在 CATALINA_BASE/conf/{hostname}/{context}/*.xml 文件里就指定了运行项目的所在位置。一般都在开发项目的 target 目录下。
IDEA中Tomcat的配置
IDEA中tomcat的热部署指的就是
On 'Update' action: []
On frame deactivation: []
前者是更新动作(Build Project 就属于 Update Action 的一种)
后者是IDEA界面失去焦点时,也就是用户切换IDEA窗口时。
二者的配置选项都有 update classses and resources 。这个配置项的意思是更新类和资源,也就是 java和resource目录。
比如:On 'Update' action: update classses and resources ,指的就是 Build Project 的同时,要更新tomcat运行项目目录下的类和资源文件。
注意:这里没有说更新 webapps (src/main/webapps)
所以当修改了 src/main/webapp 下的文件,不会热部署到tomcat下。需要手动将修改的文件覆盖到 tomcat 运行项目目录下。
部署修改后的 src/main/webapps
maven插件 resources:copy-resources 会将开发项目目录下资源文件复制都运行项目目录下,其中就包含了 src/main/webapp。
maven的install、package 都绑定了 resources:copy-resources 插件,可以通过执行 install、package 顺带执行 resources:copy-resources,将 src/main/webapp 下的文件复制到tomcat 运行项目目录下。
不过install、package命令毕竟生命周期比较长,执行慢,仅仅更新一下 jsp 文件就 install、package,有些不值当的。
可以将 resources:copy-resources 绑定到 validate 上。validate 是maven中生命周期很短的一个,执行快。绑定的方法如下:
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/${project.build.finalName}</outputDirectory>
<resources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
这样执行 validate 的同时也会执行 resources:copy-resources,将插件中配置的 src/main/webapp 复制到 outputDirectory 目录下了。(可以将目录再配置的具体些,这样复制时也能节省时间)
IDEA编译项目后,target目录下的jsp文件不更新的更多相关文章
- 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件
原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...
- 工程代码不编译src的java目录下的xml文件问题及解决
IDEA的maven项目中,默认源代码目录下(src/main/java目录)的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉.如果使用的是Eclipse,Eclip ...
- IDEA中不编译src/main/java目录下的*.xml文件
使用idea构建maven项目时不编译src/main/java目录下写的mapper.xml文件,这是找到pom.xml文件,在<build>节点下添加如下代码: <!-- map ...
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url ...
- 使用idea搭建maven项目时 java目录下的xml文件没有加载的解决方法
今天在idea集成开发环境下 使用maven搭建了ssm项目,遇到了3个问题 首先我们先复习一下知识点: 第一步:在web.xml中配置spring监听器 <!-- spring监听器 加载sp ...
- tomcat编译项目后,classes文件没有相应的改变;
tomcat编译项目后,classes文件没有相应的改变: tomcat不能将项目部署到服务器: 1.首先,在tomcat安装目录webapps中将编译后的整个项目删掉,然后再在eclipse将tom ...
- 由于xftp打开target目录,导致maven编译的时候target目录无法访问,打包失败
由于xftp打开target目录,导致maven编译的时候target目录无法访问,打包失败: 在xftp里关闭target目录就可以了...无时不在的坑
- maven 编译部署src/main/java下的资源文件
maven 编译部署src/main/java下的资源文件 maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到targ ...
- 【Unity基础知识之三】Unity Assets目录下的特殊文件夹名称
Unity3D的特殊目录名称 Unity预留了一些目录名称,这些目录有着特殊的含义.比较重要的有: Resources这个目录下的所有文件都会被打包到发布版本中,程序可以通过文件路径来访问它们.这 ...
随机推荐
- 什么是LSA,在OSPF中LSA是什么
什么是LSA:链路状态通告,它存在于LSU(链路状态更新包) Type 1 LSA:路由器LSA 每个OSPF路由器都会产生路由器LSA,描述了对应设备的物理接口所连接的链路和接口,并指明 ...
- springboot项目yml中使用中文注释报错的解决方法1
启动springboot项目时报错:/application.yml.....这大致就是说application.yml有问题,那么目前我所知道的大致两种情况会报错,第一种是yml格式有问题,要注意缩 ...
- Java中的软引用、弱引用、虚引用的适用场景以及释放机制
Java的强引用,软引用,弱引用,虚引用及其使用场景 从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引 ...
- jQuery--属性和CSS
1.属性和CSS介绍 属性(重点掌握) attr(name) 获取指定属性名的值 attr(key,val) 给一个指定属性名设置值 attr(prop) 给多个属性名设置值.参数:prop json ...
- Redis的数据类型操作(二)
1.String:key-value(做缓存) Redis中所有的数据都是字符串.命令不区分大小写,key是区分大小写的.Redis是单线程的.Redis中不适合保存内容大的数据. get.set.i ...
- django模板之forloop
在django的模板中,有forloop这一模板变量,颇似php Smarty中的foreach.customers, Smarty foreach如下: {foreach name=customer ...
- remote debug 的详细配置
一.remote debug 的简单介绍 何为远程debug,项目写完后就需要进入到测试环节,将代码打包发布到测试环境(服务器)上.这时候测试人员测试出一个缺陷(bug).由于代码已经发布到测试环境, ...
- Spring源码分析笔记--事务管理
核心类 InfrastructureAdvisorAutoProxyCreator 本质是一个后置处理器,和AOP的后置处理器类似,但比AOP的使用级别低.当开启AOP代理模式后,优先使用AOP的后置 ...
- c++中的printf、和cout和cin后面跟指针的问题
printf里面打印指针的问题 而在c语言中,使用printf只需要使用不同的格式就可以区分打印出是字符串还是指针变量的值: cout和cin后面跟指针的问题 cout<<mm 和cin& ...
- labview和matlab区别
LabVIEW和MATLAB作为本身功能比较完善的软件环境,在各自不同的领域中有着十分广泛的应用.下面小编就详细介绍LabVIEW和MATLA以及它们之间的区别. 一.LabVIEW简介 LabVIE ...