2015-09-11 99 views
7

每次我嘗試運行配置了JSP春天啓動應用程序,我得到這個錯誤:春天開機JSP錯誤:NoClassDefFoundError的

java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 
............. 
[more errors/exceptions] 
............. 
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 

我試着運行樣本:spring-boot-sample-web-jspspring-boot-sample-web-jsp

結果這些樣本也是一樣。我使用IntelliJ IDEA運行應用程序,並沒有IDEA爲什麼它不起作用。

+0

http://stackoverflow.com/questions/19690267/getting-java-lang-classnotfoundexception-javax-servlet-servletcontext-in-junit – Reimeus

+0

錯誤是告訴你,沒有找到類定義,並且堆棧跟蹤那。你跟蹤了嗎? –

回答

15

有一個bug in IntelliJ這意味着提供的依賴關係不會添加到類路徑。假設你想堅持的想法,你有幾種選擇:

  • 手動配置類路徑中IDEA
  • 運行使用mvn spring-boot:run
  • 從POM刪除的<scope>provided</scope>所有出現在命令行上的樣本。這意味着該應用程序不能部署爲Tomcat或類似的戰爭
0

我發現了一個更好的解決方法,該錯誤。

如果您直接使用命令行運行項目,將會失去IDE提供的調試功能。您可以單擊Maven Project選項卡,找到spring-boot:run goal,右鍵單擊然後選擇debug XXXX。通過使用這種方式,您可以獲得IDE提供的完整調試功能。

2

另一個workaround在錯誤報告中被建議。

您可以使用Spring文檔中建議的<scope>provided</scope>,然後進入IntelliJ中的項目設置。對於有問題的模塊,在Dependencies選項卡中,您應該看到與spring-boot-starter-tomcat相關的依賴項全部列爲「已提供」。將它們更改爲「編譯」應該強制IntelliJ將它們添加到類路徑中。

它的優點是不需要對您的pom.xml進行任何修改,並允許您使用IntelliJ提供的Spring Boot集成。

+1

而不是張貼鏈接,可能會失效,嘗試在此處包含有關該解決方法的一些細節,並將該鏈接用作參考! –

+1

好點。謝謝。我更新了我的答案。 –

+0

在我的情況下,tomcat-embed-websocket也必須改爲編譯。非常感謝 – vigamage