【问题标题】:Spring boot JSP error: NoClassDefFoundErrorSpring boot JSP报错:NoClassDefFoundError
【发布时间】:2015-12-08 11:37:40
【问题描述】:

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

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 运行应用程序,但不知道为什么它不起作用。

【问题讨论】:

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


【解决方案1】:

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

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

编辑:错误已修复,服务器将正常启动,只要您在运行配置中勾选 Include dependencies with "Provided" scope 复选框,如下类路径

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 可以保存运行配置,添加-Dspring.profiles.active=env等其他命令行开关。
    【解决方案3】:

    错误报告中建议了另一个workaround

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

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

    【讨论】:

    • 不要发布可能会过时的链接,而是尝试在此处包含有关解决方法的一些详细信息,并将链接用作参考!
    • tomcat-embed-websocket 也必须更改才能在我的情况下进行编译。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 2016-01-14
    • 1970-01-01
    • 2018-06-26
    • 2021-08-01
    • 2014-10-14
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多