Spring启动JSP错误:NoClassDefFoundError

每次我尝试运行配置了JSP的spring boot app时都会收到此错误:

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.getDeclaredMethods(Class.java:1975) ............. [more errors/exceptions] ............. Exception in thread "main" 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.getDeclaredMethods(Class.java:1975) 

我试过运行示例: spring-boot-sample-web-jsp和spring-boot-sample-web-jsp

这些样品的结果是相同的。 我使用IntelliJ IDEA运行应用程序并且没有IDEA为什么它不起作用。

IntelliJ中存在一个错误 ,意味着提供的依赖项不会添加到类路径中。 假设你想坚持使用IDEA,你有几个选择:

  • 在IDEA中手动配置类路径
  • 使用mvn spring-boot:run在命令行上运行示例
  • 从pom中删除所有出现的provided 。 这意味着app不能作为战争部署到Tomcat或类似的

编辑:错误已修复,服务器将正常启动,只要您在运行配置中勾选包含依赖项的“已提供”范围复选框,在类路径下方。

在错误报告中提出了另一种解决方法 。

您可以使用Spring文档中建议的provided ,然后进入IntelliJ中的Project Settings。 对于有问题的模块,在Dependencies选项卡中,您应该看到与spring-boot-starter-tomcat相关的依赖项都列为“已提供”。 将它们更改为“编译”应强制IntelliJ将它们添加到类路径中。

它的优点是既不需要对pom.xml进行任何修改,也允许您使用IntelliJ提供的Spring Boot集成。

我找到了一个更好的解决方法来解决这个bug。

如果直接使用命令行运行项目,则会丢失IDE提供的调试function。 您可以单击Maven Project选项卡,找到spring-boot:run goal ,右键单击然后选择debug XXXX 。 通过使用这种方式,您可以获得IDE提供的完整调试function。