2014-06-24 8 views
6

मैं मॉकएमवीसी के साथ जूनिट परीक्षण स्थापित करने की कोशिश कर रहा हूं।कन्स्ट्रक्टर ने अपवाद फेंक दिया; नेस्टेड अपवाद java.lang.N.NoClassDefFoundError: javax/servlet/ServletContext

इस link से - "या तो Servlet API का उपयोग नहीं करना चाहिए या आपको इसे कक्षापथ पर प्रदान करने की आवश्यकता है"।

मैंने निम्नलिखित pom.xml में जोड़ा लेकिन काम नहीं किया। कोई उपाय?

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

यहाँ का पता लगाने

है
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.test.context.web.WebDelegatingSmartContextLoader]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:130) 
    at org.springframework.test.context.ContextLoaderUtils.resolveContextLoader(ContextLoaderUtils.java:118) 
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:594) 
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:560) 
    at org.springframework.test.context.TestContext.<init>(TestContext.java:99) 
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:117) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:119) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:108) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at org.springframework.test.context.web.WebDelegatingSmartContextLoader.<init>(WebDelegatingSmartContextLoader.java:36) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) 
    ... 22 more 
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 28 more`enter code here` 

ठीक है, टिप्पणी के आधार पर अपडेट किया गया, तो मैं तो संकलित करने के लिए यह वर्ग के मुद्दे नहीं मिला पारित लगता गुंजाइश बदल गया है!

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>compile</scope> 
    </dependency> 
+0

जांचें कि क्या सर्वलेट निर्भरता डाउनलोड की जा रही है या नहीं। सभी निर्भरताओं को 'एमवीएन निर्भरता: प्रति-निर्भरता -Dclassifer = निर्देशिका' के साथ एक अलग फ़ोल्डर में डाउनलोड करने का प्रयास करें और देखें कि क्या वे इसे – bhowden

उत्तर

4

कक्षा रनटाइम पर नहीं मिली है लेकिन संकलन समय पर उपलब्ध है। आपको संबंधित जार जोड़ने की आवश्यकता है ताकि यह रनटाइम पर पाया जा सके। मैं आम तौर पर आइवी का उपयोग करता हूं और ग्रहण में

Project -> Properties ->Deployment Assembly -> Add -> java Build Path Enteries -> Ivy -> Finish 

मैवेन के लिए कुछ भी समान होना चाहिए।

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

6

यह एक आम मुद्दा है। अनिकेत ठाकुर ने कहा, कंटेनर रनटाइम पर सभी जावा सर्वलेट कक्षाएं प्रदान करेगा। लेकिन परीक्षणों के दौरान आप को उन्हें प्रदान करने के लिए एक जार की आवश्यकता है।

आपके पोम में जो निर्भरता आप जोड़ती है वह केवल एपीआई है: यह सबकुछ घोषित करती है लेकिन इसमें कोई कार्यान्वयन नहीं होता है। तो यह मदद नहीं करेगा। वैसे भी, आप इसे "प्रदान" के रूप में घोषित करते हैं जो मैवेन को कहता है "चिंता न करें, मुझे पता है कि यह कक्षापथ पर होगा"।

आपको एक निर्भरता जोड़नी है जो test दायरे में सभी जावा ईई कक्षाओं के कार्यान्वयन को लाती है। अपनी परियोजनाओं में मैं glassfish का उपयोग भी अगर मैं बाद में एक सर्वलेट कंटेनर के रूप में बिल्ला उपयोग करते हैं, लेकिन मैं एक बार निर्भरता एक ही समस्या के लिए googling पाया:

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.servlet</artifactId> 
    <version>3.0</version> 
    <scope>test</scope> 
</dependency> 

यह अपने NoClassDefFoundError समस्या का समाधान करना चाहिए।

+0

बनाते हैं या आप' 'परीक्षण विन्यास फाइल के लिए। – rd22

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