java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing


110

I में junitपरीक्षण चलाने के दौरान eclipseमुझे यह मिल रहा है Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

मैंने junit.jarलाइब्रेरी फ़ाइल जोड़ी है ।

मैं junit.jar के विभिन्न संस्करणों की कोशिश की है: 4.4, 4.8, आदि

मैं इस अपवाद को कैसे ठीक करूँ?


आपके विवरण के अनुसार, junit.jarसमस्या से संबंधित नहीं है
एंड्रीमोनी

1
में harcrestजार, पदानुक्रम में ही है? के रूप में org > hamcrest > SelfDescribing, या यह जार के रूट फ़ोल्डर में है?
डेनियल


1
यह त्रुटि जून जार के लिए नहीं हो सकती है, हो सकता है कि आपके प्रोजेक्ट में कुछ अन्य जार की आवश्यकता हो, यहाँ कुछ org.hamcrest.SelfDescribing हैं - ज्ञात संस्करण
jdurango

1
धन्यवाद, लेकिन मेरे पास प्रोजेक्ट में कुछ और नहीं है, मैंने यह नया प्रोजेक्ट बनाया है।
user2013948

जवाबों:


92

hamcrest-all-X.X.jarअपने वर्गपथ में जोड़ें ।

फरवरी 2015 तक नवीनतम संस्करण 1.3 है: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=


2
मैं इसे क्लासपाथ में कैसे जोड़ सकता हूं या जांच कर सकता हूं कि यह जोड़ा गया है या नहीं?
टॉम ज़ातो -

सहमत हैं, कैसे करना है कि मददगार होता। सौभाग्य से नीचे टिप्पणी यह ​​था।
MarkII

@ TomášZato पहले: फ़ाइल की जाँच करें। यह hamcrest-सब (इसे पाने के लिए महत्वपूर्ण है सभी )। आइडिया-आईडीई में एक निर्भरता जोड़ी जाती है। 1. फ़ाइल को लिबास फ़ोल्डर (या कहीं और) में कॉपी / पेस्ट करें। 2. फ़ाइल को "लाइब्रेरी के रूप में जोड़ें" पर राइट क्लिक करें। अपने .java-files में अपने आयात विवरणों की जांच करें।
मार्टिन फेफर

hamcrest-all-X.X.jarकाफी छोटा है।
एलिस्ट

1
फ़ाइल --- प्रोजेक्ट संरचना --- पुस्तकालय --- '+' --- जावा --- .... जार (आपने डाउनलोड किया है) --- ठीक है, यह 'बाहरी पुस्तकालय' में दिखाई देगा।
साइमन जेड

56

JUnit GitHub टीम की वेबसाइट ( https://github.com/junit-team/junit/wiki/Download-and-Install ) के अनुसार, junit.jarऔर hamcrest-core.jarJUnit 4.11 का उपयोग करते समय क्लासपैथ में दोनों की आवश्यकता होती है।

यहां जूनियर और हैमरेस्ट को शामिल करने के लिए मावेन निर्भरता ब्लॉक है।

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>
<!-- Needed by junit -->
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>


22

कुछ चरणों का आपको पालन करना होगा:

  1. प्रोजेक्ट पर राइट क्लिक करें।
  2. इसके बाद बनाएँ पथ चुनें इसके मेनू से लायब्रेरीज़ चुनें।
  3. JUnit चुनें फिर अगला क्लिक करें।
  4. JUnit4 चुनें फिर समाप्त करें।

1
इसने मेरे लिए इसे ठीक कर दिया। किसी ऐसे व्यक्ति के लिए जो जावा / ग्रहण का उपयोग करने के लिए उपयोग नहीं किया जाता है, यह बेहद मददगार था। मैं यह भी उल्लेख करना चाहता था कि कक्षा के लिए मेरे प्रशिक्षक द्वारा प्रदान की गई प्रयोगशालाओं में जूनिट (3 शायद) का एक संस्करण था जो मेरी लैब / एक्लिप्स के संस्करण के साथ काम नहीं कर रहा था। मुझे इसे हटाना और 4 जोड़ना था और अब सब अच्छा है। बहुत बहुत धन्यवाद।
टोनी

जब आप कमांड प्रॉम्प्ट का उपयोग करके बिल्ड को चला रहे हों तो यह काम नहीं करता है। यह एक "आईडीई" एकमात्र समाधान है।
पार्थ

16

मेरे लिए काम करता है: IntelliJ IDEA 13.1.1, JUnit4, Java 6

मैंने प्रोजेक्ट पथ में फ़ाइल बदल दी: [PROJECT_NAME] .iml

जगह ले ली:

  <library>
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

द्वारा:

  <library name="JUnit4">
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

तो अंतिम .iml फ़ाइल है:

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module-library">
      <library name="JUnit4">
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  </component>
</module>

पुनश्च: फ़ाइल को बचाने और IntelliJ आइडिया इसे फिर से लोड करने के लिए नहीं करते। सिर्फ एक बार।


सुपर कमाल!! मेरे वर्तमान प्रोजेक्ट में मेरी मदद करता है।
22


3

यह समस्या आपके क्लासपैथ मिस हैमरेस्ट-कोर-1.3.जर के कारण है। इसे हल करने के लिए हैमरेस्ट-कोर-1.3.जर जोड़ें क्योंकि आप अपने वर्गपथ में जून-4.XX.jar जोड़ते हैं।

सबसे पहले, मैं इस समस्या का सामना करता हूं, लेकिन जब मैं आधिकारिक साइट का संदर्भ लेता हूं और कमांड लाइन के साथ हैम्प्रेस्ट-कोर-1.3.jar को क्लासपाथ में जोड़ता हूं, तो यह ठीक से काम करता है।

javac -d ../../../../bin/ -cp ~/libs/junit-4.12.jar:/home/limxtop/projects/algorithms/bin  MaxHeapTest.java 

java -cp ../../../../bin/:/home/limxtop/libs/junit-4.12.jar:/home/limxtop/libs/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.limxtop.heap.MaxHeapTest

2

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


2

बस के मामले में कोई भी यहाँ netbeans का उपयोग कर रहा है और एक ही समस्या है, आपको बस इतना करना है

  • TestLbooks पर राइट क्लिक करें
  • Add Library पर क्लिक करें
  • JUnit चुनें और लाइब्रेरी जोड़ें पर क्लिक करें
  • प्रक्रिया को दोहराएं लेकिन इस बार Hamcrest पर क्लिक करें और लाइब्रेरी जोड़ें पर क्लिक करें

इससे समस्या हल हो जानी चाहिए


धन्यवाद, यह मेरे लिए काम करता है। मेरे पास पहले से ही JUnit लाइब्रेरी थी लेकिन मुझे Hamcrest याद आ रहा था।
एस। मयोल


1

यह एक क्लासपैथ मुद्दे की तरह लगता है, इसलिए इसके बारे में कुछ अलग तरीके हैं। Org / hamcret / SelfDescribing कहां से आता है? क्या वह आपकी कक्षा है या एक अलग जार में?

अपने प्रोजेक्ट बिल्ड पाथ पर और लाइब्रेरी टैब पर जाने का प्रयास करें, लाइब्रेरी जोड़ें। आपको अपने प्रोजेक्ट में JUnit को चुनने में सक्षम होना चाहिए। यह आपके प्रोजेक्ट में केवल JUnit जार फ़ाइल होने की तुलना में थोड़ा अलग है।

JUnit परीक्षण के लिए अपने रन कॉन्फ़िगरेशन में, क्लासपथ की जाँच करें। आप शायद यह सुनिश्चित करके जोड़ सकते हैं कि आपका क्लासपाथ उस SelfDescribing वर्ग को देख सकता है। एक्लिप्स में रन विकल्प JUnit विकल्पों के लिए विकल्पों का एक अलग सेट है।


क्लासपाथ का कोई मुद्दा नहीं है क्योंकि मैंने पहले से ही कनिष्ठ पुस्तकालय फ़ाइल को बिल्ड पथ में जोड़ दिया है, यहां तक ​​कि कनिष्ठ पुस्तकालय में हैमरेस्ट का संदर्भ भी है C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948

आपकी प्रतिक्रिया के लिए धन्यवाद, testNG ठीक काम कर रहा है, ऐसा लगता है कि मुझे
जूनियर

मैं सिर्फ यह सोच रहा था कि यूनेट वास्तव में एक नया जेवीएम शुरू करता है जब आप एक इकाई परीक्षण के रूप में कुछ चलाते हैं। इसका मतलब है कि यह कभी-कभी आपकी परियोजना की तुलना में एक अलग वर्गपथ का उपयोग करता है। कभी-कभी इस प्रकार की चीज़ों को डीबग करने के लिए मैं अपने कोड से जावा क्लासपाथ को प्रिंट करता हूं, इसलिए जब मैं निष्पादित करता है तो मैं मतभेदों की तुलना कर सकता हूं। java-tips.org/java-se-tips/java.lang/…
Logan

1

यदि यह समस्या एक RCP परियोजना में उत्पन्न होती है तो यह हो सकता है क्योंकि JUnit को स्पष्ट रूप से आयात किया गया है।

अपने plugin.xmlअंडर Dependenciesटैब के लिए संपादक की जाँच करें , org.junitआयातित संकुल से निकालें और org.junitआवश्यक प्लग-इन में जोड़ें।


1

समस्या यह है कि जब आप JDK के बजाय JRE को इंगित करने के लिए ग्रहण सेट करते हैं । JRE के फ़ोल्डर में है, लेकिन नहीं :) तो इसका उपाय यह है कि ग्रहण में स्थापित JRE को चेक करें, मौजूदा को हटा दें और अपने JDK की ओर इशारा करते हुए एक नया बनाएं ।junit4.jarlib/exthamcrest.jar


1

समस्या को हल करने के लिए सबसे आसान तरीका है कि आप अपने CLASSPATH में हैमरेस्ट-कोड.jar के नवीनतम संस्करण की नकल करें। यह वह फाइल है जिसे आप अपने एप्लीकेशन के संकलन और चलाने के लिए आवश्यक अन्य .jar फाइलों को स्टोर करते हैं।

वह हो सकता है जैसे: C: / ant / lib


1

यह तब होता है जब आप कमांड लाइन के माध्यम से चींटी चलाते हैं। अंतर्निहित उपयोगकर्ता निर्भरताएँ क्लासपाथ में अंत में जोड़ी जाती हैं और प्रोजेक्ट-ऐडेड क्लासपाथ पर पूर्वता लेती हैं। -nouserlibझंडे के साथ चींटी चलाएँ । निहित निर्भरता को वर्गपथ से बाहर रखा जाएगा।


1

इस समस्या को हल करने के लिए एक बेहतर उत्तर है। निर्भरता जोड़ें

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

0

मेरे पास एक ही समस्या थी, इसका समाधान बिल्ड ऑर्गन / प्लगइन में जोड़ना है। org org.hamcrest.core_1xx, आप इसे ग्रहण / प्लगइन्स में पा सकते हैं।


0

कुछ चरणों का आपको पालन करना होगा:

  • प्रोजेक्ट पर राइट क्लिक करें।
  • बिल्ड पाथ चुनें और फिर इसके मेनू से Add लाइब्रेरी चुनें।
  • JUnit चुनें फिर अगला क्लिक करें।
  • JUnit4 चुनें फिर समाप्त करें।

यह मेरे लिए काम करता है ...

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