2013-07-19 5 views
9

समस्या मेरे pom.xml [cxf-bundle-jaxrs] में निर्भरताओं में से एक के कारण हुई थी जो आंतरिक रूप से slf4j के निम्न संस्करण का उपयोग करता है। मैंने इस निर्भरता को नवीनतम रिलीज में अपग्रेड करके इस समस्या को हल करने में कामयाब रहे। सबको धन्यवाद।NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()

मैं अपाचे शिरो को अपने सीएक्सएफ स्प्रिंग वेब एप्लिकेशन में जोड़ने की कोशिश कर रहा हूं। जब मैं अपने बिल्ला 7 शुरू मैं निम्न त्रुटि

Caused by: java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) 
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) 
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) 
at org.apache.shiro.spring.LifecycleBeanPostProcessor.<clinit>(LifecycleBeanPostProcessor.java:51) 
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:525) 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100) 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) 
... 25 more 

और Shiro और slf4j के लिए मेरे pom.xml

<dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-core</artifactId> 
     <version>1.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-web</artifactId> 
     <version>1.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-spring</artifactId> 
     <version>1.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
     <scope>runtime</scope> 
    </dependency> 

मैं googling द्वारा हर संभव समाधान है, लेकिन कोई किस्मत की कोशिश की है है मिलता है।

उत्तर

1

कुछ sl4j-api और log4j संस्करणों के साथ संगत नहीं लगता है। Try this link और सही और संगत निर्भरताओं को ढूंढें और उनका उपयोग करें।

,,

SLF4J API Module 1.7.5 The slf4j API

SLF4J LOG4J-12 Binding 1.7.5 SLF4J LOG4J-12 Binding

हो सकता है आप निम्नलिखित संयोजन की कोशिश करनी चाहिए या यदि आप संस्करण का उपयोग करने 1.6.1

<!-- slf4j-log4j -->  
    <dependency>    
      <groupId>org.slf4j</groupId>   
      <artifactId>slf4j-log4j12</artifactId>  
      <version>1.6.1</version>  
    </dependency> 
+0

मैं दोनों की कोशिश की है और एक ही त्रुटि 'java.lang.NoSuchMethodError मिला: org.slf4j.impl.StaticLoggerBinder.getSingleton() Lorg/slf4j/impl/StaticLoggerBinder; ' – enfany

3

आप इस निर्भरता को शामिल करना होगा योजना बना रहे हैं:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.5</version> 
</dependency> 
+0

मैं ऊपर निर्भरता शामिल है, लेकिन अभी भी वही error.' मिला \t \t \t org.slf4j \t \t \t slf4j-api \t \t \t 1.7.5 \t \t \t \t \t \t \t org.slf4j \t \t \t slf4j-log4j12 \t \t \t 1.7.5 \t \t ' – enfany

+2

आपको यह सुनिश्चित करने की ज़रूरत है कि slf4j संस्करण सभी समान हैं। 'Slf4j-api' को 1.7.5 पर अपडेट करें या 'slf4j-log4j12' को 1.6.1 –

10
Caused by: java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 

इसका मतलब है वें आपके क्लासपाथ में कक्षा StaticLoggerBinder है। लेकिन आपके क्लासपाथ की कक्षा में विधि getSingleton()

आमतौर पर तब होती है जब आपके पास निर्भरता होती है जो दोनों एक ही पारगमन निर्भरता का उपयोग करते हैं। इसका मतलब है कि आपकी 2 निर्भरताओं (या आपका ऐप, और एक ट्रांजिटिव निर्भरता) दोनों अलग-अलग संस्करणों के साथ आंतरिक रूप से SLF4J का उपयोग कर रहे हैं। लेकिन आपका ऐप एक ही समय में कक्षा के एक संस्करण का उपयोग कर सकता है, इसलिए इसे चुनना है (यहां नियमों को नहीं जानते ... यादृच्छिक?)

समस्या को हल करने के लिए, आपको आमतौर पर एक करने की आवश्यकता होती है mvn dependency:tree यह देखने के लिए कि SLF4J के विभिन्न संस्करणों का उपयोग कर रहे हैं।

समाधान अक्सर निम्नतम संस्करण पर एक मेवेन निर्भरता बहिष्करण का उपयोग करने के लिए होता है। एसएलएफ 4 जे जैसे पुस्तकालयों को पुन: संक्रमित किया जाता है जिसका अर्थ है कि नए संस्करण अधिक सुविधाओं को जोड़ते रहते हैं। कभी-कभी, एक विधि हटा दी जाती है और फिर आपको पुराने पुस्तकालय संस्करण को रखना होगा, और प्रार्थना करें।यदि यह काम नहीं करता है, तो JarJar

पर लाइब्रेरी लॉगिंग के लिए यह कभी-कभी थोड़ा अलग होता है, इसलिए मेरी व्याख्या सामान्य उद्देश्य के लिए होती है, लेकिन यह संभव है कि आप सही लॉगिंग लाइब्रेरी निर्भरताओं का उपयोग न करें क्योंकि वे बहुत ही खास पैकेजिंग जो हमेशा समझने के लिए :) आसान नहीं हैं


चेक मैं तुम्हारे लिए क्या मिला:

getSingleton() विधि संस्करण 1.5.6 में दिखाई दिया, तो यह बहुत संभव है आप किसी लाइब्रेरी एक SLF4J संस्करण पुराने का उपयोग करता है कि 1.5.6 :) तुम सिर्फ एक Maven बहिष्कार के साथ इसे बाहर करने की आवश्यकता है (और प्रार्थना)।


संपादित करें: आप की कोशिश करनी चाहिए:

<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-bundle-jaxrs</artifactId> 
    <version>2.2</version> 
    <exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-jdk14</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

बेहतर, यदि आप एक माता पिता के साथ एक multimodule Maven परियोजना है पोम आप Maven dependencyManagement xml नोड के साथ इस का उपयोग कर सकते हैं।

+0

पर डाउनग्रेड करें' एमवीएन निर्भरता: पेड़ 'के बाद यहां कुछ नए संकेत दिए गए हैं: मेरे पास सीएक्सएफ-बंडल-जैक्सर्स 2.2 है जो आंतरिक रूप से' संगठन 'का उपयोग करता है .slf4j: slf4j-jdk14: jar: 1.3.1: रनटाइम 'मैं इस समस्या को हल करने के लिए प्रतिबाधा बहिष्करण का उपयोग कैसे कर सकता हूं? - धन्यवाद – enfany

+0

@ कुनक्सिया इसे मैवेन वेबसाइट पर समझाया गया है लेकिन मैंने अपना जवाब संपादित किया। मैं तब तक समाधान के बारे में सुनिश्चित नहीं हो सकता जब तक आप अपनी पूर्ण निर्भरता और निर्भरता पोस्ट नहीं करते: पेड़ आउटपुट –

+0

धन्यवाद, मैंने सीएक्सएफ-बंडल-जैक्सर्स को नवीनतम रिलीज में अपग्रेड करके इस समस्या को हल करने में कामयाब रहा है। मेरा बुरा मुझे पूरा pom.xml पोस्ट करना चाहिए। समाधान के साथ मेरे प्रश्न को अद्यतन करेंगे।:) – enfany

0

इस निर्भरता को जोड़ने से मेरे लिए समस्या हल हो जाती

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.25</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.5</version> 
    </dependency> 
संबंधित मुद्दे