【解决】idea启动spring MVC报错:一个或多个listeners启动失败Listener ClassNotFoundException

idea配置教程。tomcat调试报错Artifact :war exploded: Error during artifact deployment。

修改代码后,启动不生效,仍是旧代码。

根本原因是:

Modules output path和Artifacts output directory不匹配

Modules output path一定要等于Artifacts output directory加\WEB-INF\classes

先来理解一下各概念和他们的关系

Modules是项目,根是项目文件夹

Facets表述了框架、技术和语言

Facet 是和 Module 紧密结合的,你如果是在 Module 里配置了,那么 Facet 里边也会出现,而如果你先在 Facet 里配置,它会要求你选择 Module,所以结果是一致的。

Facets让Intellij IDEA知道怎么对待module内容,并保证与相应的框架和语言保持一致。

比如我们现在要开发的是一个 web 项目,那就需要 web 相关的 Facet,事实上,如果没有这个配置支持,编译器也不知道这个项目是个 web 项目,也就不会去读取 web.xml 的配置,更无法被 tomcat 这种容器支持。

Artifacts表述了maven要如何打包

例如war exploded、war、jar、ear等等这种打包形式。

对于 Module 而言,有了 Artifact 就可以部署到 web 容器中了。其中 war 和 war exploded 区别就是后者不压缩,开发时选后者便于看到修改文件后的效果。

回到最初:Modules output path和Artifacts output directory的关系

spring MVC启动/调试过程中idea的步骤

Modules输出内容是你的java代码的编译结果,可以配置使用项目配置,或者自定义

Artifacts输出内容是webapp,包括中的js html jsp等文件

在容器运行的时候,会把Module Facet的 classes 文件复制到 Artifacts 配置的目录的WEB-INF下边,然后把 Module 的 Facet 里的资源文件目录复制到 Artifacts 目录里,再就是复制 lib 下的 jar 包到 WEB-INF 下,之后项目就可以启动了。

所以

Modules output path一定要等于Artifacts output directory加\WEB-INF\classes

参考:知乎 - idea中artifacts、facets、modules

相关推荐
\光辉岁月/1 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang2 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理2 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071572 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat2 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源2 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog2 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
HEJOO93 小时前
指针的算术运算详解
java·数据结构·算法
sunshine22 girl3 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
EatFan4 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架