idea啟動springboot項目 報錯:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;


有一次啟動springboot項目的時候,報了一個非常奇怪的錯誤,說是找不到servletContext,springboot不是自帶tomcat的嗎?

在網上找了好久,說是用以下方式解決。

解決方式:

將tomcat的lib包下的servlet-api.jar 拷貝到java的jre下的lib里即可。(需要在idea中重新導入一下jdk)

mac 電腦下尋找java安裝目錄方式:在終端下執行  

/usr/libexec/java_home -V 

但是查看同事的java的jre包下並沒有這個jar,但是人家都能啟動起來。這個就不知到為什么了?

雖然自己解決了這個問題,卻不知所以然。。。。

后來我發現我們的項目里用的是 undertow服務器,難道是跟這個有關系嗎?

 2.另一種解決方式:

今天將項目的服務器由tomcat換成undertow,發現項目在本地可以啟動成功,但是發不到服務器就啟動不成功,就報跟上面同樣的錯誤,原來是我本地的jre環境有sevlet-api,但是我不能也往服務器的jre也放同樣的吧,畢竟這樣不合理。后來就查找原因,原來是undertow的jar包中已經有了sevlet-api 3.1版本的,但是為何啟動不成功呢,原來我的另一個jar包中也有sevlet-api,而且還是2.5版本的,

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
項目在啟動的時候優先找到了2.5版本的,而2.5版本的ServletContext類里沒有getClassLoader這個方法,所以才報的錯,解決方式是將2.5版本的排除,服務器就啟動成功了。
總結:看來maven項目的依賴還得多研究。


免責聲明!

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



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