SpringBoot依賴scope為provided時,IDEA運行報錯

報錯信息如下【不同環境報錯信息可能不一致,大概就是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、問題描述

所有scopeprovided 的依賴都是不會被加入到 classpath 中的,目前該bug尚未被修復(bug report)。如果你的web應用是部署到容器中的,那么這個bug不會影響使用,因為web應用中provided的依賴在容器運行時會被提供。如果你做Spring Boot開發,有帶provided的依賴時,直接在IDE中運行項目會導致ClassNotFound異常

2、解決方案

  1. 【推薦】在運行配置Configuration選項卡下Use classpath of module的下方有個復選框 Include dependences with "Provided" scope 把這個勾上就可以了。
  2. packaging為jar時,直接更改scopecompile(不推薦)
  3. 使用mvn命令:mvn spring-boot:run(如果需要DEBUG,點擊IDE右側的Maven Projects, 在Plugins找到spring-boot:run,右鍵選擇 debug 運行)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容