2012-09-14 37 views
5

Tôi đã nhìn thấy một số câu trả lời tương tự cho câu hỏi này có lẽ nhưng tôi cảm thấy tình hình của tôi là khác nhau. Tôi đang phát triển một ứng dụng MVC mùa xuân hoạt động tuyệt vời cho đến nay, đó là tôi đã bao gồm apoop hadoop trong dự án của mình, khi tôi bao gồm hadoop ngoại lệ này bắt đầu xảy ra khi tôi cố gắng mở trang tổng quan ban đầu đã hoạt động trước đây:Ngoại lệ servlet Jsp

java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ 
ServletContext;)Ljavax/servlet/jsp/JspApplicationContext; 
org.apache.jsp.ServerInfo_jsp._jspInit(ServerInfo_jsp.java:63) 
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) 
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:158) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9 

Sau đây là cách phụ thuộc hadoop của tôi trông giống như:

<dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-client</artifactId> 
      <version>0.23.1-mr1-cdh4.0.0b2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-core</artifactId> 
      <version>0.23.1-mr1-cdh4.0.0b2</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.mortbay.jetty</groupId> 
        <artifactId>jetty</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

Khi tôi thêm video này vào ứng dụng của tôi nó không còn có thể sử dụng và một cách tự nhiên mà không cần những dependecies thứ chạy rất trơn tru. Tôi đang thiếu gì ở đây?

Trả lời

5

Tôi nghĩ rằng vấn đề của bạn là hadoop bao gồm một phiên bản của API servlet đang đến trước API servlet "đúng" trong đường dẫn lớp. Hadoop có phụ thuộc vào Jetty, và cầu cảng sẽ lần lượt cố gắng bao gồm một API servlet.

Tôi có một dự án có thiết lập rất giống, Spring MVC và Hadoop. Tôi có các loại trừ dưới đây cho sự phụ thuộc của hadoop. Lưu ý rằng điều này có thể thay đổi đôi chút tùy thuộc vào phân phối hadoop của bạn, tôi đang sử dụng cloudera. Vì thùng chứa servlet mà bạn đang sử dụng thường sẽ xuất phát với sự phụ thuộc javax.servlet của riêng nó, nên loại trừ của bạn cần phải nắm bắt trường hợp này. Tôi chỉ đã thử nghiệm cấu hình bên dưới với Cầu tàu:

  <dependency>  
       <groupId>org.apache.hadoop</groupId> 
       <artifactId>hadoop-core</artifactId> 
       <version>${hadoop.version}</version> 
      <exclusions> 

      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-util</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-api-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>servlet-api-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.servlet</groupId> 
       <artifactId>servlet-api</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.servlet.jsp</groupId> 
       <artifactId>jsp-api</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-compiler</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-runtime</artifactId> 
      </exclusion> 
      <!-- other exclusions snipped for brevity --> 
1

Gần đây tôi đã có kinh nghiệm tương tự với lõi đơn 1.2.1 trong ứng dụng web của tôi. Trên đầu trang của các phụ thuộc Paul Sanwald nêu rõ, tôi loại trừ một số dependendencies org.eclipse.jetty:

  <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-server</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-servlet</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-client</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-plus</artifactId> 
      </exclusion> 

Nó không hoàn toàn rõ ràng với tôi cho dù mỗi một trong những được loại trừ, nhưng tôi muốn chắc chắn không có phụ thuộc không cần thiết đã nhận được trong - Tôi đang sử dụng Tomcat, cung cấp các thư viện JSP và servlet. jetty-servlet chắc chắn phải đi.

Các vấn đề liên quan