2009-08-01 15 views
8

में एक और java.lang.ClassNotFoundException मैं समझ नहीं क्यों मैं अपने चींटी build.xml फ़ाइल से यह अपवाद हो रही है। मैंने चेक किया और सबकुछ कक्षा में है। यह इतना जटिल क्यों होना चाहिए ?!चींटी के JUnit कार्य

मैंने पहले भी चींटी में समस्या आई है और यह ऐसा लगता है हमेशा classpath से संबंधित कुछ है। मैं junit.jar पर दोनों तरीकों का उपयोग कर रहा हूं: ग्रहण के भीतर: विंडो-> वरीयताएँ-> चींटी-> रनटाइम-> चींटी होम-> बाहरी जार जोड़ें, और build.xml स्क्रिप्ट के भीतर भी। इस बार चींटी जूनिट कार्य में मेरी टेस्ट क्लास का पता लगाने में सक्षम नहीं है। क्या इस वर्ग को इंगित करने के तरीके में कुछ गड़बड़ है?

<target name="init"> 
    <property name="sourceDir" value="src"/> 
    <property name="outputDir" value="build" /> 
    <property name="junitLocation" value="C:\...\org.junit4_4.3.1\junit.jar" /> 
</target> 

<target name="clean" depends="init"> 
    <delete dir="${outputDir}" /> 
</target> 

<target name="prepare" depends="clean"> 
    <mkdir dir="${outputDir}" /> 
</target> 

<target name="compile" depends="prepare"> 
    <javac srcdir="${sourceDir}" destdir="${outputDir}" classpath="${junitLocation}"/> 
</target> 

<path id="classpath"> 
    <pathelement location="${outputDir}" /> 
    <pathelement location="${junitLocation}" /> 
</path> 

<target name="testApplication" depends="compile"> 
    <echo>Running the junit tests...</echo> 
    <junit fork="yes" haltonfailure="yes"> 
     <test name="my.package.MyTest" /> 
     <formatter type="plain" usefile="false" />  
     <classpath refid="classpath" /> 
    </junit> 
</target> 

मैं हमेशा हो रही है:

[junit] Testsuite: my.package.MyTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit]  Caused an ERROR 
    [junit] my.package.MyTest 
    [junit] java.lang.ClassNotFoundException: my.package.MyTest 
    [junit]  at java.net.URLClassLoader$1.run(Unknown Source) 
    [junit]  at java.security.AccessController.doPrivileged(Native Method) 
    [junit]  at java.net.URLClassLoader.findClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClass(Unknown Source) 
    [junit]  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClass(Unknown Source) 
    [junit]  at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Unknown Source) 

BUILD FAILED 

जाहिर है, चींटी junit.jar पाता है और परीक्षण शुरू करने के लिए प्रयास करता है, लेकिन यह अपने परीक्षण वर्ग क्यों नहीं मिल सकती है? मैं संकलित परीक्षण वर्ग के साथ फ़ोल्डर को इंगित करता हूं। तो मुझे पता है कि जूनिट कम से कम चींटी के कक्षा में है, लेकिन क्लास नॉटफाउंड मुझे पहेली करता है।

शायद कोई विचार? बहुत धन्यवाद!

+0

बस जांच - आप देख सकते हैं ./build/my/package/MyTest.class? आप सुनिश्चित हैं कि यह ठीक से बनाता है? – duffymo

+0

हाँ, मैं संकलित वर्ग को सही निर्देशिका में देख सकता हूं, कोई समस्या नहीं – denchr

उत्तर

6

आप सुनिश्चित करें कि आपके परीक्षण वर्ग build फ़ोल्डर में है कर रहे हैं? आप एक अलग JVM (फोर्क = सत्य) में junit का आह्वान कर रहे हैं, इसलिए यह संभव है कि उस आमंत्रण के दौरान कार्य फ़ोल्डर बदल जाएगा और build रिश्तेदार होने के कारण, इससे कोई समस्या हो सकती है।

विस्तृत कक्षा/काम करने वाले डीआईआर junit को देखने के लिए -verbose या -debug स्विच के साथ कमांड लाइन (ग्रहण से नहीं) से एंटी चलाएं, यदि आप अभी भी इसे हल नहीं कर पा रहे हैं तो परिणामों को यहां से पोस्ट और पोस्ट कर दिया जा रहा है मुद्दा।

+0

मुझे डर जाएगा! मुझे लगता है कि तुम कुछ कर रहे हो! मैंने स्क्रिप्ट को में बदल दिया और यह काम किया! क्या फोर्क = नहीं सेट करने के लिए कोई विशेष नुकसान है? – denchr

+0

यह एक नया जेवीएम उत्पन्न करता है। जब तक आपको ऐसा करने की आवश्यकता न हो, तब तक आप इसे छोड़ना चाहेंगे ताकि आपके परीक्षण चींटी के साथ प्रक्रिया में चल सकें। या, यदि आप कांटा का उपयोग करते हैं, तो अपने काम करने वाले फ़ोल्डर को स्पष्ट रूप से निर्दिष्ट करने के लिए 'dir' विशेषता सेट करें। – ChssPly76

+0

फोर्किंग उपयोगी है यदि आपके परीक्षण बहुत मेमोरी का उपयोग करते हैं; जब कांटा = हाँ आप maxmemory सेट कर सकते हैं जो फोर्क किए गए JVM उदाहरण पर -Xmx करता है। – Spyder

2

आप classpath को JUnit जार जोड़ने की जरूरत नहीं है। अगर चींटी इसे नहीं मिल पाती है, तो <junit> कार्य नहीं चलेगा।

मैं classpath http://ant.apache.org/manual/using.html#path पर चींटी दस्तावेज़ में वर्णित के रूप में निर्दिष्ट करने के विभिन्न तरीकों की कोशिश कर सुझाव देते हैं; विशेष रूप से <classpath path="${srcdir}" /> मदद कर सकता है।

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

+1

आप ' 'के बारे में गलत हैं, junit.jar के बिना नहीं चल रहे हैं। चींटी 1 के बाद से।7 '' वर्ग के वर्गपंथ में junit.jar को रखना संभव है जब तक कि चींटी 'ant-junit.jar' चींटी के लिए उपलब्ध न हो। उस ने कहा, मैं सहमत हूं कि यह सबसे अच्छा तरीका नहीं है – ChssPly76

+0

पता नहीं क्यों इसे वोट दिया गया था। – ChssPly76

+0

ऑफ़सेट करने के लिए +1 इसके लिए धन्यवाद। मैं चींटी 1.7 का उपयोग नहीं करता :) – Spyder

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