報錯信息如下【不同環境報錯信息可能不一致,大概就是
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.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
1、問題描述
所有scope
為 provided
的依賴都是不會被加入到 classpath 中的,目前該bug尚未被修復(bug report)。如果你的web應用是部署到容器中的,那么這個bug不會影響使用,因為web應用中provided的依賴在容器運行時會被提供。如果你做Spring Boot開發,有帶provided的依賴時,直接在IDE中運行項目會導致ClassNotFound異常
- 官方Bug ?? https://youtrack.jetbrains.com/issue/IDEA-107048
上面給出了挺多的解決方案,感興趣的可以自行查看
2、解決方案
-
【推薦】
在運行配置Configuration
選項卡下Use classpath of module
的下方有個復選框 Include dependences with "Provided" scope 把這個勾上就可以了。 - 當
packaging
為jar時,直接更改scope
為compile
(不推薦) - 使用mvn命令:
mvn spring-boot:run
(如果需要DEBUG,點擊IDE右側的Maven Projects, 在Plugins
找到spring-boot:run
,右鍵選擇 debug 運行)