2011-12-17 12 views
5

, ग्रहण Helios 3.6 के नवीनतम संस्करण में नवीनीकरण के बाद M2E 1.0, डब्ल्यूटीपी 3.2.5 और मेरे Maven भागने की कोशिश कर परियोजना जो JSF 2.1.3 और स्प्रिंग 3बिल्ला 7 पर उपयोग करता है, मैं निम्न अपवाद हो रही है:

java.lang.ClassNotFoundException: javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects$4 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) 
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826) 
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:621) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450) 

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature 
    at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp(ConfigureListener.java:693) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:243) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Dec 17, 2011 4:56:04 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener 
java.lang.RuntimeException: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:292) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature 
    at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp(ConfigureListener.java:693) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:243) 
    ... 8 more 

निम्नलिखित मीटर है Maven के लिए y विन्यास:

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


     <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1.3</version> 
     </dependency> 

     <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.1.3</version> 
     </dependency> 

     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

मैं एक जार फ़ाइल याद आ रही है, या एक जार का असंगत संस्करण का उपयोग कर?

कृपया सलाह दें, धन्यवाद।

अद्यतन:

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

      <dependency> 
      <groupId>javax.el</groupId> 
      <artifactId>javax.el-api</artifactId> 
      <version>2.2.2</version> 
      <scope>provided</scope> 
      </dependency> 

मुझे लगता है कि है कि वे द्वारा प्रदान की जार के साथ परस्पर विरोधी गया: क्या मैं अब तक प्राप्त है कि मैं पोम फ़ाइल से निम्नलिखित निर्भरता को हटाने के द्वारा ठीक से चलाने के लिए आवेदन प्राप्त है कंटेनर।

क्या मैं पता करने की जरूरत: javax.servlet.jsp-api, मेरे पोम फाइल करने के लिए javax.el-api प्रदान की या मैं उन्हें बिल्कुल भी जोड़ने की जरूरत नहीं है के रूप में:

1- मैं निर्भरता को जोड़ने के लिए है?

2- मैं उन दो निर्भरता को जोड़ने के लिए है, तो मैं कैसे उन्हें ठीक से एक तरीका है कि वे बिल्ला जार के साथ संघर्ष नहीं होगा में जोड़ना चाहिए, कौन-सा संस्करण है, जिसका अर्थ है, और के रूप में प्रदान की गई या नहीं मैं निर्भरता को चिह्नित करना चाहिए?

और महत्वपूर्ण सवाल मैं उन्हें जोड़ने के लिए, मैं क्यों हैं, क्योंकि वे कंटेनर द्वारा प्रदान की जाती हैं उन्हें जोड़ने के महत्व क्या है क्या करना है है, मैं अब तक समझते हैं, कि मैं जोड़ने की जरूरत है javax.servlet-api निर्भरता और इसे प्रदान के रूप में चिह्नित करें क्योंकि मैं कुछ कक्षाओं में servlets का उपयोग कर रहा हूं।

+3

मैं कोई मेवेन लड़का नहीं हूं, इसलिए मुझे यह नहीं पता कि इसे कैसे ठीक किया जाए, लेकिन मैं कम से कम बता सकता हूं कि अपवाद इंगित करता है कि आपके पास अंतिम वेबएप के रनटाइम क्लासपाथ में एकाधिक ईएल एपीआई जेएआर फ़ाइलें हैं (विरोधाभासी वर्ग है 'javax.el' पैकेज)। यदि आप निश्चित हैं कि मेवेन अपना काम सही कर रहा है, तो आपको यह सत्यापित करने की आवश्यकता है कि आपने मैन्युअल रूप से */WEB-INF/lib', 'टोमकैट/lib',' JRE/lib' में कुछ भी नहीं रखा है, 'जेआरई/lib/ext' और कोई अन्य पथ जो वेबपैप के रनटाइम क्लासपाथ द्वारा कवर किया गया है। टॉमकैट 7 पहले से ही सही ईएल 2.2 एपीआई/इम्प्ले के साथ जहाज चलाता है, इसलिए आपको इसे स्वयं (या मेवेन द्वारा) आपूर्ति करने की आवश्यकता नहीं है। – BalusC

+0

@ बालससी तो आपका मतलब है कि मुझे प्रदान की गई अल निर्भरता को हटा देना चाहिए, और केवल जेएसपी-एपीआई और सर्वलेट-एपीआई प्रदान किए गए हैं? –

+0

जैसा कि कहा, मैं कोई मेवेन लड़का नहीं हूँ। मुझे पता नहीं है। आपको यह सत्यापित करने की आवश्यकता है कि मेवेन-निर्मित युद्ध सही है या नहीं और यदि आपने डुप्लीकेट किए गए ईएल एपीआई जेएआर फाइलों के साथ पूर्ववर्ती लाइब्रेरी पथ मैन्युअल रूप से अव्यवस्थित नहीं किया है। – BalusC

उत्तर

2

आप केवल अगर आप जिसका अर्थ है कि वे अपने कोड को संकलित करने के लिए आवश्यक हैं अपने कोड में उन्हें चाहते हैं कि ये निर्भरता जोड़ना चाहिए। यदि आप अपने कोड में जेएसपी या ईएल कक्षाओं का उपयोग नहीं करते हैं, तो आप निर्भरताओं को हटा सकते हैं। तो आप परीक्षण कर सकते हैं कि क्या आपको केवल उन्हें हटाकर निर्भरताओं की आवश्यकता है। यदि आपका कोड अभी भी संकलित है, तो आपको उनकी आवश्यकता नहीं है। :)

आप उन्हें जरूरत है, तो आप निश्चित रूप से उन्हें provided निर्भरता के रूप में जोड़ने क्योंकि कक्षाएं रनटाइम के दौरान बिलाव द्वारा प्रदान की जाती हैं चाहिए। बस सुनिश्चित करें कि निर्भरता के संस्करण टोमकैट द्वारा प्रदान किए गए संस्करणों से मेल खाते हैं। तब आपको कोई समस्या नहीं होगी। प्रदान की गई निर्भरताओं का उपयोग सिर्फ आपके कोड को संकलित करने के लिए किया जाता है लेकिन वे परिणामी WAR फ़ाइल में पैक नहीं होते हैं, जो ठीक है, क्योंकि टॉमकैट उन्हें प्रदान करता है।

1

मैं एक ऐसी ही समस्या थी: मैं एक कंप्यूटर में एक परियोजना चलाने के लिए सक्षम था, लेकिन एक और एक में, मैं ClassNotFoundException प्रश्न में वर्णित प्राप्त किया गया था।

2 वातावरण के बीच एकमात्र अंतर टॉमकैट सर्वर का संस्करण था: वर्किंग कंप्यूटर में 7.0.26 और दूसरे में 7.0.16। मैंने दोनों कंप्यूटरों (7.0.26) में एक ही संस्करण स्थापित किया और इस मुद्दे को हल किया।

मुझे आशा है कि यह उत्तर किसी के लिए उपयोगी हो सकता है।

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