2017-02-20 18 views
7

मैं इस त्रुटि मिलती है जब Gradle निर्माणकक्षा पथ कई SLF4J बाइंडिंग त्रुटि

मैं इसे एक संस्करण संघर्ष समझते हैं लेकिन यकीन है कि यह कैसे हल करने के लिए और जो

संस्करण बाहर नहीं चलाने के लिए tring शामिल ...

Gradle निर्भरता का पेड़ है:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules- 
2/files-2.1/org.slf4j/slf4j- 
log4j12/1.6.1/bd245d6746cdd4e6203e976e21d597a46f115802/slf4j-log4j12- 
1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in 
[jar:file:/C:/Users/i/.gradle/caches/modules-2/files- 
2.1/ch.qos.logback/logback- 
classic/1.1.3/d90276fff414f06cb375f2057f6778cd63c6082f/logback-classic- 
1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an  
explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class  
path, preempting StackOverflowError. 


compile - Compile classpath for source set 'main'. 
+--- com.google.code.gson:gson:2.2.4 
+--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0 
| \--- org.yaml:snakeyaml:1.15 
+--- org.projectlombok:lombok:1.16.10 
+--- javax.validation:validation-api:1.1.0.Final 
+--- org.apache.commons:commons-lang3:3.4 
+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
\--- org.slf4j:slf4j-api:1.7.21 

default - Configuration for default artifacts. 
+--- com.google.code.gson:gson:2.2.4 
+--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0 
| \--- org.yaml:snakeyaml:1.15 
+--- org.projectlombok:lombok:1.16.10 
+--- javax.validation:validation-api:1.1.0.Final 
+--- org.apache.commons:commons-lang3:3.4 
+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
\--- org.slf4j:slf4j-api:1.7.21 

runtime - Runtime classpath for source set 'main'. 
+--- com.google.code.gson:gson:2.2.4 
+--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0 
| \--- org.yaml:snakeyaml:1.15 
+--- org.projectlombok:lombok:1.16.10 
+--- javax.validation:validation-api:1.1.0.Final 
+--- org.apache.commons:commons-lang3:3.4 
+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
\--- org.slf4j:slf4j-api:1.7.21 

testCompile - Compile classpath for source set 'test'. 
+--- com.google.code.gson:gson:2.2.4 
+--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0 
| \--- org.yaml:snakeyaml:1.15 
+--- org.projectlombok:lombok:1.16.10 
+--- javax.validation:validation-api:1.1.0.Final 
+--- org.apache.commons:commons-lang3:3.4 
+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 -> 4.11 
| |   \--- org.hamcrest:hamcrest-core:1.3 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
+--- org.slf4j:slf4j-api:1.7.21 
\--- junit:junit:4.11 (*) 

testRuntime - Runtime classpath for source set 'test'. 
+--- com.google.code.gson:gson:2.2.4 
+--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0 
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0 
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0 
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0 
| \--- org.yaml:snakeyaml:1.15 
+--- org.projectlombok:lombok:1.16.10 
+--- javax.validation:validation-api:1.1.0.Final 
+--- org.apache.commons:commons-lang3:3.4 
+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 -> 4.11 
| |   \--- org.hamcrest:hamcrest-core:1.3 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
+--- org.slf4j:slf4j-api:1.7.21 
\--- junit:junit:4.11 (*) 

लेकिन मुझे नहीं पता भी इसे पढ़ने के ...

क्या आप कृपया मदद कर सकते हैं?

+0

के रूप में जब Gradle चल रहा है, यह आपके आवेदन निर्भरता में नहीं पाया जा सकता । कृपया अपनी बिल्ड स्क्रिप्ट दिखाएं। – Vampire

उत्तर

-1

आपकी निर्भरता चिड़ियाघर में org.slf4j:slf4j-api निर्भरता भी शामिल है। तो बस इसे

+--- org.apache.zookeeper:zookeeper:3.4.5 
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 
| +--- org.slf4j:slf4j-log4j12:1.6.1 
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 # <-- dependency includes slf4j-api 
| | \--- log4j:log4j:1.2.16 
| +--- log4j:log4j:1.2.15 -> 1.2.16 
| +--- jline:jline:0.9.94 
| | \--- junit:junit:3.8.1 
| \--- org.jboss.netty:netty:3.2.2.Final 
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6 
+--- org.apache.httpcomponents:httpclient:4.5.3 
| +--- org.apache.httpcomponents:httpcore:4.4.6 
| +--- commons-logging:commons-logging:1.2 
| \--- commons-codec:commons-codec:1.9 
+--- commons-io:commons-io:2.5 
+--- org.jdom:jdom2:2.0.5 
+--- org.slf4j:slf4j-api:1.7.21 # <-- Also included as a first tier dependency 

अपने build.gradle में सिर्फ zookeeper lib से बाहर शामिल नहीं है।

dependencies { 
    compile('org.apache.zookeeper:zookeeper:3.4.5') { 
     // exclude transitive logging dependency from zookeeper 
     exclude group: 'org.slf4j' 
     // might need to exclude log4j, not sure? 
     exclude group: 'log4j', module: 'log4j' 
    } 
    // .. other dependencies 
} 
+0

यह उत्तर पूरी तरह गलत है। उत्पादक आवेदन में कोई समस्या नहीं है। क्लासपाथ में slf4j-api होने के कारण सही है और slf4j बाइंडिंग द्वारा पारगमन में भी खींचा जाता है। चूंकि त्रुटि संदेश बताते हैं, समस्याएं हैं (ए) कि log4j बाध्यकारी और लॉगबैक बाध्यकारी दोनों क्लासपाथ में हैं और (बी) कि log4j बाइंडिंग और log4j पुल दोनों क्लासपाथ में हैं। लेकिन जैसा कि निर्माण के दौरान होता है और अंतिम उत्पाद का उपयोग करने के दौरान नहीं, यह बिल्डस्क्रिप्ट क्लासपाथ का मामला है। आपका उत्तर पूरी तरह गलत है और बिल्डस्क्रिप्ट के बिना यह उत्तरदायी नहीं है। – Vampire

1

रूप @Vampire ने कहा, इस buildscript classpath बजाय compile या runtime विन्यास के साथ एक समस्या की तरह दिखता है। यह शायद के माध्यम से

buildscript { 
    configurations { 
     classpath { 
      exclude group: 'ch.qos.logback', module: 'logback-classic' 
      // OR 
      exclude group: 'org.slf4j', module: 'slf4j-log4j12' 
     } 
    } 
    dependencies { ... } 
} 
5

सबसे पहले तय किया जा सकता है, SLF4J विभिन्न प्रवेश चौखटे के लिए एक सरल मुखौटा है (उदाहरण के java.util.logging, logback, log4j) की अनुमति के अंत उपयोगकर्ता वांछित लॉगिंग में प्लग करने के लिए तैनाती के समय पर ढांचा।

सरल शब्दों में इसका क्या अर्थ है?

जब आप SLF4J का उपयोग करते हैं, तो आपका कोड SLF4J (SLF4J-API) द्वारा प्रदान किए गए एक सामान्य लॉगिंग इंटरफ़ेस पर निर्भर करेगा, और दूसरी ओर आप अपनी पसंद के लॉगिंग फ्रेमवर्क को SLF4J पर प्लग करेंगे जो आपको अलग-अलग स्विच करने की अनुमति देगा लॉगिंग ढांचे आसानी से।

तो, एसएलएफ 4 जे मुखौटा का उपयोग करते समय आप अपने कोड में उपयोग की जाने वाली सभी लॉगिंग कॉल अंतर्निहित लॉगिंग फ्रेमवर्क में सौंपी जाएंगी।

चित्रण से आप देख सकते हैं कि आपका ऐप प्रत्येक सामान्य लॉग फ्रेमवर्क के साथ एक आम एपीआई इंटरफ़ेस SLF4J API का उपयोग करता है।

enter image description here

अब, आपकी Gradle उत्पादन पर नजर डालते हैं:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules- 
2/files-2.1/org.slf4j/slf4j- 
log4j12/1.6.1/bd245d6746cdd4e6203e976e21d597a46f115802/slf4j-log4j12- 
1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in 
[jar:file:/C:/Users/i/.gradle/caches/modules-2/files- 
2.1/ch.qos.logback/logback- 
classic/1.1.3/d90276fff414f06cb375f2057f6778cd63c6082f/logback-classic- 
1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an  
explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class  
path, preempting StackOverflowError. 

यह दो अलग SLF4J प्रवेश ढांचे बाइंडिंग की स्थिति, पर पहला है org.slf4j/slf4j-log4j12 है जो LOG4J logging framework बाध्यकारी है, और दूसरा ch.qos.logback/logback-classic है जो Logback logging framework है, जो एसएलएफजे एपीआई का मूल कार्यान्वयन है।

तो, अपनी समस्या को हल करने के लिए आपको को अपने क्लासपाथ से बाहर करने की आवश्यकता है।

विशेष रूप से यहाँ, समस्याग्रस्त विरूपण साक्ष्य org.apache.zookeeper:zookeeper:3.4.5 इसलिए की लॉगिंग ढाँचे में से एक को बाहर कर सकते है:

dependencies { 
    compile('org.apache.zookeeper:zookeeper:3.4.5') { 
     exclude group: 'ch.qos.logback', module: 'logback-classic' 
    } 
    //... 
} 

संदर्भ: समस्या यह है SLF4J manual

+0

आप इसे कैसे बाहर निकालते हैं? – emigenix

+2

बहिष्करण का एक उदाहरण जोड़ा गया। – Stas

+1

वास्तव में समस्या को विस्तारित करने के प्रयासों के लिए धन्यवाद और यह बताते हुए कि slf4j क्या है और यह कैसे काम करता है! – Montaro

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