idea中启动tomcat问题之一

最近新建了一个简单的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 这个就可以了。如下图所示:

 

   

   当然正常情况下,创建项目是会默认加进去的。

猜你喜欢

转载自java-holding.iteye.com/blog/2358144