2015-09-11 80 views
7

每次我尝试运行配置了JSP春天启动应用程序,我得到这个错误:春天开机JSP错误: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.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为什么它不起作用。

+0

http://stackoverflow.com/questions/19690267/getting-java-lang-classnotfoundexception-javax-servlet-servletcontext-in-junit – Reimeus

+0

错误是告诉你,没有找到类定义,并且堆栈跟踪那。你跟踪了吗? –

回答

15

有一个bug in IntelliJ这意味着提供的依赖关系不会添加到类路径。假设你想坚持的想法,你有几种选择:

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

我发现了一个更好的解决方法,该错误。

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

2

另一个workaround在错误报告中被建议。

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

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

+1

而不是张贴链接,可能会失效,尝试在此处包含有关该解决方法的一些细节,并将该链接用作参考! –

+1

好点。谢谢。我更新了我的答案。 –

+0

在我的情况下,tomcat-embed-websocket也必须改为编译。非常感谢 – vigamage