SpringBoot依赖scope为provided时,IDEA运行报错
报错信息如下【不同环境报错信息可能不一致,大概就是NoClassDefFoundError异常】:java.lang.NoClassDefFoundError: javax/servlet/ServletContextat java.lang.Class.getDeclaredMethods0(Native Method)at java.lang.Clas...
·
报错信息如下【不同环境报错信息可能不一致,大概就是
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 运行)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)