SpringBoot依賴scope為provided時(shí),IDEA運(yùn)行報(bào)錯(cuò)

報(bào)錯(cuò)信息如下【不同環(huán)境報(bào)錯(cuò)信息可能不一致,大概就是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、問(wèn)題描述

所有scopeprovided 的依賴都是不會(huì)被加入到 classpath 中的,目前該bug尚未被修復(fù)(bug report)。如果你的web應(yīng)用是部署到容器中的,那么這個(gè)bug不會(huì)影響使用,因?yàn)閣eb應(yīng)用中provided的依賴在容器運(yùn)行時(shí)會(huì)被提供。如果你做Spring Boot開(kāi)發(fā),有帶provided的依賴時(shí),直接在IDE中運(yùn)行項(xiàng)目會(huì)導(dǎo)致ClassNotFound異常

2、解決方案

  1. 【推薦】在運(yùn)行配置Configuration選項(xiàng)卡下Use classpath of module的下方有個(gè)復(fù)選框 Include dependences with "Provided" scope 把這個(gè)勾上就可以了。
  2. 當(dāng)packaging為jar時(shí),直接更改scopecompile(不推薦)
  3. 使用mvn命令:mvn spring-boot:run(如果需要DEBUG,點(diǎn)擊IDE右側(cè)的Maven Projects, 在Plugins找到spring-boot:run,右鍵選擇 debug 運(yùn)行)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容