最近新建了一个简单的springmvc项目,同样是采取maven来管理的。一切配置好之后,在idea中用tomcat启动却一直报错,查看了下主要是日志这里:
java.lang.NoClassDefFoundError: org/apache/log4j/LogManager at org.springframework.util.Log4jConfigurer.shutdownLogging(Log4jConfigurer.java:123) at org.springframework.web.util.Log4jWebConfigurer.shutdownLogging(Log4jWebConfigurer.java:172) at org.springframework.web.util.Log4jConfigListener.contextDestroyed(Log4jConfigListener.java:54) at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4840) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) ... 49 more
排查过程:
1 根据提示很明显的就是缺少相应的jar包,然后去pom文件中看了下。跟这个日志有关的几个jar都是存在的:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j-version}</version> </dependency>
ps:上面的slf4j版本号:1.7.12
2 jar既然没问题,但是tomcat启动却一直报错。于是就先不用tomcat来启动,直接在idea中来启动,方法 是利用单元测试来测试的,
①相关依赖包:
<!--test--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.8.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> </dependency>
② 测试类:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/applicationContext.xml","/dispatcher-servlet.xml"}) public class TxtFileServiceImplTest { @Autowired private TxtFileService txtFileService; public void testStart(){ txtFileService.getLocalTxtFileVale(); } }
结果可以正常测试成功,证明项目是没问题的。
3 检查打包到tomcat的jar包(tomcat-webapps -项目名称-lib下) 结果发现果然缺少这些包,问题找到了,原来是配置tomcat启动项目的时候包没有加进去,解决办法:
1⃣️ 鼠标选中项目按F4或者右键选择 open-moulde-setting
2⃣️ 在弹出框左侧 选择Artifacts 然后选中你tomcat解析的那个war包,在右侧最大的那个框看下你需要加载的包是不是已经放到WEB-INF--lib 目录下了,如果没有的话,选中需要加载的包 右键,选择Put into web-inf/lib 这个就可以了。如下图所示:
当然正常情况下,创建项目是会默认加进去的。