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、问题描述
【SpringBoot依赖scope为provided时,IDEA运行报错】所有
scope
为 provided
的依赖都是不会被加入到 classpath 中的,目前该bug尚未被修复(bug report)。如果你的web应用是部署到容器中的,那么这个bug不会影响使用,因为web应用中provided的依赖在容器运行时会被提供。如果你做Spring Boot开发,有带provided的依赖时,直接在IDE中运行项目会导致ClassNotFound异常- 官方Bug ?? https://youtrack.jetbrains.com/issue/IDEA-107048
上面给出了挺多的解决方案,感兴趣的可以自行查看
-
【推荐】
在运行配置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 运行)
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 带有Hilt的Android上的依赖注入
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- springboot使用redis缓存
- Vue源码分析—响应式原理(二)
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤
- springboot中.yml文件的值无法读取的问题及解决