2014-06-21 4 views
5

मैं निम्नलिखित त्रुटि मिलती रहती है:बिलाव ClassNotFoundException: org.slf4j.spi.LoggerFactoryBinder लेकिन slf4j libs में है

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org/slf4j/spi/LoggerFactoryBinder 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     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:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:270) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1420) 
     at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129) 
     at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 
     at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302) 
     at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276) 
     at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 
     at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 
     at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:274) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:282) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4830) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5276) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:698) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:968) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1742) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.spi.LoggerFactoryBinder 
     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:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 37 more 
21-Jun-2014 17:06:51.352 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error listenerStart 
21-Jun-2014 17:06:51.358 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/spring-app] startup failed due to previous errors 
21-Jun-2014 17:06:51.399 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/docs 
21-Jun-2014 17:06:51.829 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/examples 
21-Jun-2014 17:06:53.181 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/host-manager 
21-Jun-2014 17:06:53.575 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/manager 
21-Jun-2014 17:06:53.950 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/ROOT 
21-Jun-2014 17:06:54.324 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 
21-Jun-2014 17:06:54.328 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 
21-Jun-2014 17:06:54.329 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 9393 ms 
21-Jun-2014 17:07:14.840 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy Undeploying context [/spring-app] 
21-Jun-2014 17:07:44.907 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /media/win/d/coding/servers/tomcat/apache-tomcat-8.0.0-RC5/webapps/spring-app.war 
Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org/slf4j/spi/LoggerFactoryBinder 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     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:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:270) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1420) 
     at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129) 
     at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 
     at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302) 
     at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276) 
     at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 
     at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 
     at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:274) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:282) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4830) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5276) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:698) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:968) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1742) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.spi.LoggerFactoryBinder 
     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:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 37 more 

यह क्योंकि मैं web-app/WEB-INF/lib/slf4j-api-1.7.6.jar में क्या org.slf4j.spi.LoggerFactoryBinder है और इस काम कोई मतलब नहीं है कल भी लेकिन अचानक वेब ऐप शुरू नहीं किया जा सकता है।

इसका कारण क्या हो सकता है?
मैं शुरुआत में टॉमकैट में किसी वेब एप्लिकेशन के लिए क्लासपाथ को कैसे डिबग/डिबग कर सकता हूं?

उत्तर

0

यदि आप टोटलैट को catalina.sh (या .bat) स्क्रिप्ट्स के साथ चला रहे हैं- जो स्टार्टअप.श और शटडाउन.श द्वारा उपयोग किया जाता है), तो आप "-verbose: class" को शामिल करने के लिए JAVA_OPTS चर को संशोधित कर सकते हैं "स्विच करें। यही कारण है कि कारण होगा लोड कक्षाओं की जानकारी आपकी समस्या के बारे में मानक बाहर

को मुद्रित करने के लिए, मुझे लगता है जो परस्पर विरोधी हो सकता है जार के कुछ पुराने संस्करण हो सकता है

13

आप कहते हैं कि slf4j एपीआई जार है (था) वेब अनुप्रयोग का हिस्सा था। मुझे लगता है कि आपकी slf4j बाध्यकारी जार (था) टॉमकैट के lib निर्देशिका या ऐसी कुछ जगह पर स्थापित किया गया था जहां यह वेब एप्लिकेशन के लिए निजी नहीं था। ऐसा लगता है कि यह Slf4j का उपयोग करने का एक प्राकृतिक तरीका होना चाहिए - वेब ऐप इसे एपीआई जार लाता है, और टॉमकैट इंस्टॉलेशन सही बाध्यकारी प्रदान करता है। दुर्भाग्य से, यह काम नहीं करता है।

Tomcat classloader how-to का संदर्भ लें। जब इस फैशन में Slf4j तैनात किया जाता है, तो एपीआई जार को वेब ऐप के लिए निजी क्लासलोडर का उपयोग करके लोड किया जाता है, जबकि बाइंडिंग जार को "सामान्य" क्लासलोडर या अन्य सामान्य क्लासलोडर्स में से एक का उपयोग करके लोड किया जाता है। वेबएप क्लासलोडर में कक्षाएं सामान्य लोडर से कक्षाएं लोड कर सकती हैं, लेकिन सामान्य लोडर में कक्षाएं वेबपैप लोडर तक नहीं पहुंच सकती हैं।

विशेष रूप से, आपका अपवाद तब होता है जब एपीआई जार में एक वर्ग बाइंडिंग जार, org.slf4j.impl.StaticLoggerBinder में कक्षा को लोड करने का प्रयास कर रही है। वेब ऐप में आपका कोड एपीआई जार तक पहुंचने में सक्षम है, और एपीआई जार बाध्यकारी जार में इस कक्षा को खोजने में सक्षम है। लेकिन, स्टेटिक लॉजिंग बाइंडर संदर्भ org.slf4j.spi.LoggerFactoryBinder जो एपीआई जार में वापस आ गया है। बाध्यकारी जार में कक्षाएं वेबपैप क्लासलोडर तक नहीं पहुंच सकती हैं, इसलिए यह कक्षा को लोड करने में सक्षम नहीं है और आपको अपवाद मिलता है।

दुर्भाग्यवश, एकमात्र सीधा समाधान एक ही "स्थान" में Slf4j API और बाध्यकारी जार दोनों को तैनात करना है। उन्हें दोनों वेब ऐप के निजी वर्गों का हिस्सा होना चाहिए, या अन्य आम टोमकैट वर्गों का हिस्सा होना चाहिए।