जार लोड नहीं हुआ। सर्वलेट स्पेस 2.3 देखें, सेक्शन 9.7.2। अपमानजनक वर्ग: javax / servlet / Servlet.class


100

मैं एक मावेन परियोजना चला रहा हूं जो एक गतिशील वेब परियोजना भी है। मैंने मावेन में सभी स्प्रिंग लाइब्रेरी का उपयोग किया है। मैंने बनाया है web.xml, लेकिन जब मैं अपना टॉमकैट 7 सर्वर शुरू करता हूं तो मुझे निम्नलिखित संदेश मिल रहा है:

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

मैंने सर्वलेट को हटाने की कोशिश की webapp/lib, लेकिन यह काम नहीं किया। मुझे बताएं कि मेरे मामले में क्या किया जाना चाहिए।


ध्यान दें कि यह व्यवहार सर्वलेट विनिर्देश के अनुसार है। एक पूरी समझ अधिक मुश्किल समस्याओं को समझने में सहायक होती है जो आप में चल सकते हैं।
थोरबजोरन रावन एंडरसन

जवाबों:


113

सर्वलेट API .jar फ़ाइल को तब से वेबैप के अंदर एम्बेड नहीं किया जाना चाहिए, जाहिर है, कंटेनर में पहले से ही अपने वर्गपथ में ये कक्षाएं हैं: यह इस जार में निहित इंटरफेस को लागू करता है।

निर्भरता providedगुंजाइश में होनी चाहिए , डिफ़ॉल्ट compileगुंजाइश के बजाय , आपके मावेन पोम में:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

"निर्भरता आपके मावेन पोम में डिफ़ॉल्ट संकलित गुंजाइश के बजाय प्रदान की गई गुंजाइश में होनी चाहिए।" मैं कैसे कर सकता हूँ
dreambigcoder

मेरा संपादित उत्तर देखें। मावेन का उपयोग करके ऐप को साफ और निर्माण करें, और जांचें कि सर्वलेट जार उत्पन्न वेब में WEB-INF / lib निर्देशिका में नहीं है।
जेबी निज़ेट

मैंने सब कुछ किया। अभी तक मुझे WEB-INF / lib निर्देशिका में जार मिल रहा है। यदि मैं जार को हटाता हूं तो मुझे नीचे संदेश मिल रहा है जानकारी: प्रारंभिक सर्वलेट इंजन: अपाचे टोमाट / 7.0.12 क्या मुझे कुछ भी करने की आवश्यकता है?
ड्रीमबिगकोडर

6
हो सकता है कि आपके पास एक निर्भरता है जो किसी अन्य सर्वलेट जार संस्करण में एक सकर्मक निर्भरता है। मावन निर्भरता का उपयोग करें: यह सर्वलेट जार कहाँ से आता है, यह पता लगाने के लिए पेड़, और एक बहिष्करण जोड़ें।
जेबी निज़ेट

मैं आइवी के लिए समान कैसे करूं?
दिनेश बाबू KG KG

21

आपको यह चेतावनी संदेश तब मिलता है जब सर्वलेट एपी जार फ़ाइल पहले ही कंटेनर में लोड हो चुकी है और आप इसे एक बार फिर libनिर्देशिका से लोड करने का प्रयास करते हैं ।

सर्वलेट स्पेक्स का कहना है कि आपको अपने वेबैप्सlib निर्देशिका में सर्वलेट.जर की अनुमति नहीं है ।

  • बस servlet.jarअपनी libनिर्देशिका से हटाकर चेतावनी संदेश से छुटकारा पाएं ।
  • यदि आपको libअपने बिल्ड पथ के लिए निर्देशिका स्कैन में जार नहीं मिलता है और जार को हटा दें।

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

यदि आप एक मावेन परियोजना चला रहे हैं, तो javax.servlet-apiनिर्भरता को providedआप में गुंजाइश के लिए बदल दें pom.xml क्योंकि कंटेनर पहले से ही अपने आप में सर्वलेट जार प्रदान करता है।


4

इसे ठीक करने के लिए, सेट गुंजाइश को प्रदान की । यह केवल संकलन और परीक्षण के लिए मावेन का उपयोग कोड सर्वलेट-एपी.जर बताता है, लेकिन इसे WAR फ़ाइल में शामिल नहीं करते हैं। तैनात कंटेनर रनटाइम के दौरान सर्वलेट-एपी.जर को "प्रदान करेगा"।

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

2

आपको निम्न विंडोज़ कमांड लाइन मिल सकती है जो कि ऑफ़िंग जार फ़ाइल को ट्रैक करने में उपयोगी है। यह फ़ोल्डर में सभी जार में सभी वर्ग फ़ाइलों का एक सूचकांक बनाता है। अपने तैनात किए गए एप्लिकेशन के काम के फ़ोल्डर के भीतर से निष्पादित करें, फिर अपमानजनक वर्ग के लिए index.txt फ़ाइल खोजें।

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt

2

मावेन डिपेंडेंसी स्कोप

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


1

मैं इस मुद्दे से जूझ रहा हूं और मैंने कई "समाधान" आजमाए हैं।

हालांकि, अंत में, केवल एक ही काम किया और इसे करने के लिए वास्तव में कुछ सेकंड लगे: हटाने और नए सर्वर इंस्टेंस को वापस जोड़ने के लिए !

असल में, मैंने राइट टू एक्लिप्स में अपने टॉमकैट सर्वर पर सर्वर के नीचे क्लिक किया और इसे हटा दिया। अगला, मैंने एक नया टॉमकैट सर्वर जोड़ा है। आवेदन को साफ और फिर से तैयार किया और मुझे इस त्रुटि से छुटकारा मिल गया।


अपने सर्वर पर राइट क्लिक करें -> क्लीन ... और फिर फिर से अपने सर्वर पर राइट क्लिक करें -> क्लीन
टोमैट

0

जार फ़ाइल el-api.jar के लिए निम्नलिखित निर्देशिका के अंदर की जाँच करें: C: \ Apache-tomcat-7.0.39 \ lib \ el-api.jar यदि यह मौजूद है तो आपके वेब एप्लिकेशन WEB-INF \ lib \ की इस निर्देशिका में el-api.jar जार हटा दिया जाना चाहिए


0

जब आपका URL पैटर्न गलत है, तो यह त्रुटि हो सकती है।

जैसे। यदि आपने @WebServlet ("लॉगिन") लिखा है, तो यह त्रुटि दिखाई जाएगी। सही एक है @WebServlet ("/ लॉगिन")।


0

providedबाल परियोजनाओं में बहिष्करण और निर्भरता काम नहीं करेगी।

यदि आप मावेन परियोजनाओं में विरासत का उपयोग कर रहे हैं, तो आपको मूल फ़ाइल पर इस कॉन्फ़िगरेशन को शामिल करना होगाpom.xmlयदि आप विरासत का उपयोग कर रहे हैं, तो<parent>...</parent> आपके pom.xml में एक अनुभाग होगा । तो आपके पास अपने माता-पिता में ऐसा कुछ होगा :pom.xml

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

0

JAX-WS निर्भरता लाइब्रेरी "jaxws-rt.jar" गायब है।

यहां जाएं http://jax-ws.java.net/ । JAX-WS RI वितरण डाउनलोड करें। इसे अनज़िप करें और टॉम्केट लाइब्रेरी फ़ोल्डर "{$ TOMCAT} / lib" पर "jaxws-rt.jar" को कॉपी करें। टॉमकैट को फिर से शुरू करें।


0

आमतौर पर जब आप इस संदेश को देखते हैं, यह सौम्य है। अगर यह कहे

INFO: validateJarFile(/<webapp>/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

इसका मतलब है कि यह आपके सर्वलेट-एफी-2.5.जर को नजरअंदाज कर रहा है क्योंकि टॉमकैट में पहले से ही उस जार का एक अंतर्निहित संस्करण है, इसलिए यह आपका उपयोग करने वाला नहीं है। आमतौर पर यह एक समस्या का कारण नहीं है।

यदि फिर भी यह कहता है WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

तब आप क्या कर सकते हैं (मेरे उदाहरण में, यह एक छायांकित जार है) चलाया जाता है

$ मवन निर्भरता: पेड़

और पता चलता है कि आपके पास "कुछ" पर एक सकर्मक निर्भरता है जो एक जार पर निर्भर करता है जो या तो सर्वलेट-एपीआई है या ऐसा कुछ (पूर्व:) tomcat-servlet-api-9.0.0। इसलिए अपने पोम में एक बहिष्करण जोड़ें, पूर्व: (मेरे मामले में, आपके मामले में टोमैट, शायद अन्य उत्तरों में उल्लिखित हैं):

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>

-4

servlet.jarस्रोत web-inf/libफ़ोल्डर से निकालें क्योंकि यह टॉमकैट libफ़ोल्डर में उपलब्ध है तब यह ठीक काम करता है


1
यह उत्तर कुछ भी नहीं जोड़ता है जो पहले से ही इस उत्तर में नहीं है ।
ग्लोरफाइंडेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.