Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext


 

場景描述

項目中用到spring boot進行帶頁面的開發,從github上的simples中下載了對應的spring-boot-sample-web-jsp項目,經簡單修改之后死活啟動不起來,各種異常。
spring-boot以簡單容易上手為核心宗旨,可為什么在引入jar時就會出現這么多問題呢?

異常信息

異常一:

2016-06-17 11:04:14.216 ERROR 4684 --- [           main] o.s.boot.SpringApplication               : Application startup failed

java.lang.NoClassDefFoundError: javax/servlet/ServletContext
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
    at java.lang.Class.getDeclaredMethods(Class.java:1855)

 

很顯然,這是沒有找到ServletContext類導致的,於是乎,異想天開的添加了servlet-api的jar包。 
添加之后,出現異常二:

2016-06-17 11:06:13.860 ERROR 224 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

 



在網上搜索了各種此異常的解決方案都沒有解決成功。

解決方案

在經過多次嘗試,幾乎要放棄的時候,突然想到一個問題,會不會是因為Intellij集成maven引入jar包時scope設置的問題。

仔細檢查pom文件,發現問題可能出現在一下兩個地方:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>1.2.3.RELEASE</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>7.0.68</version>
        <scope>provided</scope>
    </dependency>

 

注釋掉兩個配置中的

<scope>provided</scope>

問題就這么解決了。

總結

這可能是Intellij的一個bug,在使用spring-boot的時候,如果把某個引入的依賴設置為provided,那么在Intellij啟動時就會找不到相應的類。因此,此時需要把此項配置給注釋掉,但是打包上線的時候並不需要這些依賴,那么在打包的時候就把注釋打開,即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM