2012-09-14 13 views
5

मैंने शायद इस प्रश्न का कुछ समान जवाब देखा है लेकिन मुझे लगता है कि मेरी स्थिति अलग है। मैं अब तक एक स्प्रिंग एमवीसी ऐप विकसित कर रहा हूं, जिसमें मैंने अपने प्रोजेक्ट में हैडोप एपीआई शामिल किया था, जब मैंने हडूप को शामिल किया था, तो यह अपवाद शुरू हो रहा था जब मैं प्रारंभिक डैशबोर्ड पेज खोलने की कोशिश कर रहा था जो पहले काम करता था:जेएसपी सर्वलेट अपवाद

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 
यह इन dependecies बातें बहुत चिकनी चलाने के बिना उपयोग नहीं किया और स्वाभाविक रूप से है

<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> 

एक बार मैं अपने ऐप से जोड़ें:

यहाँ कैसे मेरी Hadoop निर्भरता की तरह लग रहा है। मुझे यहां क्या समझ नहीं आ रहा है?

उत्तर

5

मुझे लगता है कि आपकी समस्या यह है कि हैडूप में सर्वलेट एपीआई का एक संस्करण शामिल है जो क्लासपाथ में "सही" सर्वलेट एपीआई से पहले आ रहा है। हैडोप की जेटी पर निर्भरता है, और जेटी बदले में सर्वलेट एपीआई को शामिल करने का प्रयास करेगा।

मेरे पास एक बहुत ही समान सेटअप, स्प्रिंग एमवीसी और हैडोप के साथ एक परियोजना है। मेरे पास हैडऑप निर्भरता के लिए नीचे बहिष्कार हैं। ध्यान दें कि यह आपके हडूप वितरण के आधार पर थोड़ा भिन्न हो सकता है, मैं क्लौडेरा का उपयोग कर रहा हूं। चूंकि आपके द्वारा उपयोग किए जाने वाले सर्वलेट कंटेनर आमतौर पर अपने स्वयं के javax.servlet निर्भरता के साथ शिप करेंगे, इसलिए आपके बहिष्कार को इस मामले को पकड़ने की आवश्यकता है। मैं केवल जेट्टी के साथ नीचे विन्यास का परीक्षण किया है:

  <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

मैं हाल ही में अपने वेब आवेदन में Hadoop कोर 1.2.1 के साथ एक समान अनुभव था। निर्भरता पॉल Sanwald संकेत दिया के शीर्ष पर, मैं कुछ org.eclipse.jetty dependendencies अपवर्जित:

  <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> 

यह मेरे लिए पूरी तरह से स्पष्ट इन में से हर एक था कि क्या बाहर रखा जाना नहीं है, लेकिन मुझे यकीन है कि बनना चाहता था कोई अनियंत्रित निर्भरताएं नहीं मिल रही थीं - मैं टोमकैट का उपयोग कर रहा हूं, जो जेएसपी और सर्वलेट पुस्तकालय प्रदान करता है। जेटी-सर्वलेट को निश्चित रूप से जाना पड़ा।

संबंधित मुद्दे