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 目录下了。(可以将目录再配置的具体些,这样复制时也能节省时间)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律