জার বোঝা হয়নি। সার্ভলেট স্পেস 2.3, বিভাগ 9.7.2 দেখুন। অফারিং ক্লাস: জাভ্যাক্স / সার্লেট / সার্লেটলেট.ক্লাস


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

সার্ভলেট এপিআই। জার ফাইলটি ওয়েব অ্যাপের মধ্যে এম্বেড করা উচিত নয়, স্পষ্টতই, ধারকটির ইতিমধ্যে তার ক্লাসপথে এই ক্লাস রয়েছে: এটি এই জারে থাকা ইন্টারফেসগুলি প্রয়োগ করে।

নির্ভরতা আপনার মাভেন পোমে providedডিফল্ট compileসুযোগের চেয়ে সুযোগের মধ্যে থাকতে হবে :

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

"নির্ভরতা আপনার মাভেন পোমে ডিফল্ট সংকলনের সুযোগের পরিবর্তে প্রদত্ত স্কোপে থাকা উচিত।" আমি কীভাবে এটি করতে পারি
ড্রিমবাইগ কোডার

আমার সম্পাদিত উত্তর দেখুন। মাভেন ব্যবহার করে অ্যাপ্লিকেশনটি পরিষ্কার করুন এবং তৈরি করুন এবং জেনে নিন যে সার্ভলেট জারটি জেনারেট হওয়া ওয়েবঅ্যাপের WEB-INF / lib ডিরেক্টরিতে নেই।
জেবি নিজেট

আমি সব করেছি। তবুও আমি WEB-INF / lib ডিরেক্টরিতে পাত্রটি খুঁজে পাচ্ছি। যদি আমি জারটি সরিয়ে ফেলি আমি নীচে বার্তাটি পেয়ে যাচ্ছি ইনফো: সার্ভলেট ইঞ্জিন শুরু হচ্ছে: অ্যাপাচি টমক্যাট / 7.0.12 আমার কিছু করার দরকার আছে কি?
ড্রিমবাইগ কোডার

6
হতে পারে আপনার একটি নির্ভরতা রয়েছে যা অন্য কোনও সার্লেট জারের সংস্করণে একটি ট্রানজিটিভ নির্ভরতা রয়েছে। এমভিএন নির্ভরতা ব্যবহার করুন: এই সার্লেট জারটি কোথা থেকে এসেছে তা জানতে গাছ এবং একটি বর্ধন যোগ করুন।
জেবি নিজেট

আইভির জন্য আমি কীভাবে একইভাবে করব?
দীনেশ বাবু কেজি

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যেহেতু ধারক ইতিমধ্যে সার্ভলেট জারটি নিজের মধ্যে সরবরাহ করেছিল।


4

এটি ঠিক করতে, সেট সুযোগ থেকে প্রদান করা । এটি ম্যাভেনকে কেবল সংকলন এবং পরীক্ষার জন্য সার্ভলেট-এপি.জার ব্যবহার কোডটি বলে, তবে এটি ওয়ার ফাইলটিতে অন্তর্ভুক্ত করে না। মোতায়েন করা পাত্রে রানটাইমটিতে সার্লেট-এপিআই.জার সরবরাহ করবে।

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

2

আপত্তিজনক জার ফাইলটি ট্র্যাক করার জন্য আপনি নীচের উইন্ডোজ কমান্ড লাইনটিকে দরকারী দেখতে পেতে পারেন। এটি ফোল্ডারের সমস্ত জারে সমস্ত শ্রেণীর ফাইলের একটি সূচক তৈরি করে। আপনার মোতায়েন করা অ্যাপ্লিকেশনটির lib ফোল্ডারের মধ্যে থেকে কার্যকর করুন, তারপরে আপত্তিজনক শ্রেণীর জন্য index.txt ফাইলটি সন্ধান করুন।

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

2

মাভেন নির্ভরতা স্কোপ

প্রদত্ত এই অনেক কম্পাইল ভালো হয়, কিন্তু নির্দেশ করে যে আপনি আশা করতে JDK বা ধারক রানটাইম এ নির্ভরতা প্রদান। উদাহরণস্বরূপ, জাভা এন্টারপ্রাইজ সংস্করণের জন্য ওয়েব অ্যাপ্লিকেশন তৈরি করার সময়, আপনি সার্লেটlet এপিআই এবং সম্পর্কিত জাভা ইই এপিআইয়ের উপর নির্ভরতা নির্ধারিত স্কোপে সরবরাহ করবেন কারণ ওয়েব ধারক সেই ক্লাসগুলি সরবরাহ করে । এই সুযোগটি কেবল সংকলন এবং পরীক্ষার শ্রেণিপথে উপলভ্য, এবং ট্রান্সটিভ নয়।


1

আমি এই সমস্যাটির সাথে লড়াই করছি এবং আমি অনেক "সমাধান" চেষ্টা করেছি।

যাইহোক, শেষ অবধি, কেবলমাত্র এটিই কাজ করেছিল এবং এটি করতে কয়েক সেকেন্ড সময় লেগেছিল: মুছে ফেলা এবং নতুন সার্ভারের দৃষ্টান্তটি যুক্ত করুন !

মূলত, আমি সার্ভারের অধীনে Eclipse এ আমার টমক্যাট সার্ভারে ডান ক্লিক করে এটিকে মুছলাম। এরপরে, আমি একটি নতুন টমকেট সার্ভার যুক্ত করেছি। অ্যাপ্লিকেশনটি পরিষ্কার এবং পুনর্বার নিয়োগ করা হয়েছে এবং আমি এই ত্রুটি থেকে মুক্তি পেয়েছি।


আপনার সার্ভারে ডান ক্লিক করুন -> ক্লিন ... এবং তারপরে আবার আপনার সার্ভারে ডান ক্লিক করুন -> ক্লিন টমক্যাট ওয়ার্ক ডিরেক্টরিটি আমার জন্য এটি ঠিক করে দিয়েছে
কিলটেক

0

জার ফাইল এল-এপিআই.জারের জন্য নিম্নলিখিত ডিরেক্টরিটির ভিতরে চেক করুন: সি: \ অ্যাপাচি-টমক্যাট -7.0.39 লিব b এল-এপি.জার যদি এটি বিদ্যমান থাকে তবে আপনার ওয়েব অ্যাপ্লিকেশনটির ডিরেক্টরিতে ওয়েব-আইএনএফ \ lib \ el-api.jar জারটি সরানো উচিত


0

আপনার ইউআরএল প্যাটার্নটি ভুল হলে এই ত্রুটি ঘটতে পারে।

যেমন আপনি যদি @ ওয়েবসার্ভালেট ("লগইন") লিখে থাকেন তবে এই ত্রুটিটি প্রদর্শিত হবে। সঠিকটি হ'ল @ ওয়েবসার্ভলেট ("/ লগইন")।


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

জ্যাকস-ডাব্লুএস নির্ভরতা গ্রন্থাগার "jaxws-rt.jar" অনুপস্থিত।

এখানে যান http://jax-ws.java.net/ । JAX-WS আরআই বিতরণ ডাউনলোড করুন। এটি আনজিপ করুন এবং টমক্যাট লাইব্রেরি ফোল্ডারে “ax $ টমক্যাট} / 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

এর অর্থ এটি আপনার সার্লেলেট-এপিআই -২.০. জারকে উপেক্ষা করছে কারণ টমক্যাটের ইতিমধ্যে সেই জারের একটি অন্তর্নির্মিত সংস্করণ রয়েছে, সুতরাং এটি আপনারটি ব্যবহার করবে না। সাধারণত এটি কোনও সমস্যা সৃষ্টি করে না।

তবে যদি এটি বলে WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

তারপরে আপনি কী করতে পারেন (আমার উদাহরণস্বরূপ, এটি একটি ছায়াময় জারে) চালানো হয়

v এমভিএন নির্ভরতা: গাছ

এবং আবিষ্কার করুন যে আপনি "কিছু" এর উপর একটি ট্রানজিটিভ নির্ভরতা রয়েছেন যা জারের উপর নির্ভর করে যা হয় সার্লেলেট-এপিআই বা এর মতো কিছু (যেমন 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ফোল্ডারে পাওয়া যায় তারপর এটি ঠিকঠাক কাজ করে


4
এই উত্তরটি এমন কোনও কিছু যুক্ত করে না যা ইতিমধ্যে এই উত্তরে নেই
গ্লোরফাইন্ডেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.