Java 在Eclipse之外部署应用程序时,调用JSP文件会导致NoSuchMethodError

Java 在Eclipse之外部署应用程序时,调用JSP文件会导致NoSuchMethodError,java,jsp,maven,servlets,web-applications,Java,Jsp,Maven,Servlets,Web Applications,我有一个maven项目,它在eclipse中完全按照预期工作。它也在eclipse之外构建和运行,但当我尝试调用前端(JSP网页)时,我得到以下结果: 访问/时出现问题。原因: javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor; 原因: java.lang.NoSuchMethodError: getJspConfigDescriptor()Lja

我有一个maven项目,它在eclipse中完全按照预期工作。它也在eclipse之外构建和运行,但当我尝试调用前端(JSP网页)时,我得到以下结果:

访问/时出现问题。原因:

javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor;
原因: java.lang.NoSuchMethodError: getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor;

我环顾四周,发现这条消息似乎与Servlet2.5和Servlet3.0之间的不兼容有关。但我的pom中已经有Servlet 3.0作为依赖项:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
</dependency>
剩下的几个jsp文件位于webapp文件夹中

编辑2: 我已经检查了打包项目时创建的jar的内容,jar中似乎有javax/servlet/servlet.class的多个副本。这有点令人困惑。我假设pom中的这些其他依赖项(如下所列)必须添加额外的Servlet.class文件

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>8.1.8.v20121106</version>
</dependency>

org.eclipse.jetty
jetty服务器
8.1.8.v20121106
org.eclipse.jetty
jetty网络应用程序
8.1.8.v20121106
org.eclipse.jetty
码头
8.1.8.v20121106
但我不知道如何解决这些问题


如果有人有什么想法,我很乐意听听。唯一真正的限制是我必须使用jetty 8.1.8.v20121106。

在我看来,您可能正在tomcat 6上部署servlet 3.0,这是不受支持的,并且会导致此异常


另一种可能性是,您可以在war中导出干扰tomcat默认库的其他.class。

您是在tomcat 6还是tomcat 7中部署此类?此应用程序具有嵌入式jetty哪个版本的嵌入式jetty?您能否显示您的
web.xml
?不使用web.xml访问JSP。我已经编辑了这个问题的附加细节,我正在使用嵌入式Jetty 8。但即使在你的解释中。。。我很好奇为什么它会在Eclipse环境中工作?因为如果您的web服务器(tomcat或jetty)不支持3.0 servlets,则会导致该异常,因为特定的类/方法不可用。在Eclipse中运行程序使用的是相同的嵌入式jetty,对吗?您使用的是Eclipse SE还是Eclipse EE?您是否在EclipseEE中配置了tomcat或jetty服务器?您的项目是从公共静态void main执行的吗?如果您是从main执行的,那么可能是当您的eclipse用完时,您没有正确配置您的类路径,或者您的JAR没有包含依赖库,这将导致找不到类定义。基本上,如果eclipse中的整个项目都是SE项目,那么很可能是类路径问题。如果它是一个WEB项目,eclipse EE配置了服务器等,这是另一个问题。该项目未配置为eclipse EE WEB项目,因此我假设您将其称为SE项目,因为我真正使用的唯一EE组件是javax.servlet。我没有在eclipse中配置任何服务器。是的,项目是从公共静态void main执行的。所以从您的回答来看,这似乎是一个类路径问题。。。奇怪的是,它只会错过这个依赖项,因为它们都是以相同的方式(通过maven)添加的。
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>8.1.8.v20121106</version>
</dependency>