重装Eclipse后Tomcat部署WAR包遇HTTP 404及Struts2过滤器启动失败求助
看起来你遇到了一个典型的依赖异常导致应用启动失败的问题,咱们先从日志里的核心错误入手分析:
从你贴出的日志来看,根本原因是log4j的初始化失败,进而导致Struts2过滤器无法启动,最终Web应用上下文加载失败——这就是为什么你会看到HTTP 404(因为Tomcat里根本没有成功部署这个/test_app/应用)。
核心错误拆解
日志里的关键报错链:
SEVERE: Exception starting filter [struts2] java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.util.PropertiesUtil ... Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoSuchMethodError: org.osgi.framework.FrameworkUtil.getBundle(Ljava/lang/Class;)Lorg/osgi/framework/Bundle;
这说明你的项目依赖中,OSGI相关的jar包要么缺失,要么版本和log4j所需的不兼容,导致log4j无法完成初始化,直接阻断了Struts2过滤器的启动流程。
具体解决方案建议
检查WAR包的依赖完整性
把你部署的WAR包解压,查看WEB-INF/lib目录:- 确认存在完整的log4j 2.x相关jar包(比如
log4j-api.jar、log4j-core.jar,两个版本要完全一致) - 确认包含兼容的OSGI核心jar包(比如
org.osgi.core.jar,建议版本4.3及以上,要和log4j版本匹配)
- 确认存在完整的log4j 2.x相关jar包(比如
修复Eclipse的构建与部署配置
重装Eclipse后,项目的部署配置很容易被重置:- 右键项目 → 「Properties」→「Java Build Path」:检查「Libraries」标签下所有依赖都正常(无红色感叹号),如果有缺失的依赖,重新引入正确版本。
- 进入「Deployment Assembly」配置:确保所有需要的依赖jar都被设置为部署到
WEB-INF/lib目录,没有遗漏。
清理缓存并重建项目
- 先清理Tomcat的缓存:找到Tomcat安装目录下的
work和temp文件夹,删除所有内容,避免旧的缓存文件干扰。 - 在Eclipse中执行「Project」→「Clean...」,选中你的项目清理后,重新导出WAR包部署。
- 先清理Tomcat的缓存:找到Tomcat安装目录下的
排查依赖版本冲突
如果项目中引入了多个版本的OSGI或log4j相关jar,会引发类加载冲突:
可以用Eclipse的「Dependency Hierarchy」功能(在Java Build Path的Libraries里,选中某个jar右键→「Open Dependency Hierarchy」),查看是否有重复或版本冲突的依赖,排除掉冗余的版本。验证log4j配置文件
确认WEB-INF/classes目录下有正确的log4j配置文件(比如log4j2.xml),且配置没有语法错误——配置文件出错也可能导致log4j初始化失败。
只要解决了log4j和OSGI依赖的问题,Struts2过滤器就能正常启动,Web应用也会成功部署,404的问题自然就消失了。
备注:内容来源于stack exchange,提问作者Dr Aditya Raj

