Spring启动JSP错误:NoClassDefFoundError

时间:2015-09-11 20:11:47

标签: java spring jsp spring-mvc spring-boot

每当我尝试运行配置了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-jspspring-boot-sample-web-jsp

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

3 个答案:

答案 0 :(得分:18)

bug in IntelliJ表示提供的依赖项未添加到类路径中。假设你想坚持使用IDEA,你有几个选择:

  • 在IDEA中手动配置类路径
  • 使用mvn spring-boot:run
  • 在命令行上运行示例
  • 从pom中删除所有出现的<scope>provided</scope>。这意味着app不能作为战争部署到Tomcat或类似的
编辑:错误已修复且服务器将正常启动,只要您在运行配置中勾选 包含“提供”范围 的依赖关系复选框,的 类路径

答案 1 :(得分:4)

错误报告中提出了另一个workaround

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

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

答案 2 :(得分:1)

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

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