2012-01-19 18 views
19

मैं एक परियोजना है कि दोनों निर्भरता स्वतंत्र रूप से उपयोग करने की आवश्यकता होती है का उपयोग करते हुए: BoneCP और हाइबरनेट। लेकिन SLF4J और उसकी संस्करण संघर्ष करने के लिए धन्यवाद यह काम नहीं करता क्योंकि BoneCP SLF4J 1.5 की आवश्यकता है और हाइबरनेट SLF4j 1.6 की आवश्यकता है। जैसा कि आप जानते हैं कि आपके pom.xml में समान निर्भरता के दो अलग-अलग संस्करणों के लिए महत्वपूर्ण नहीं है। तो मैं इस अद्भुत एसएलएफ 4 जे साइड इफेक्ट को हल करने के लिए क्या कर सकता हूं ???Maven + SLF4J: संस्करण संघर्ष जब दो अलग निर्भरता कि दो अलग अलग SLF4J संस्करणों

त्रुटि मैं कुख्यात है:

SLF4J: The requested version 1.5.10 by your slf4j binding is not compatible with [1.6] 
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 

मैं इस जोड़ने की जरूरत है, लेकिन दो विभिन्न संस्करणों के साथ एक ही निर्भरता अनुमति नहीं है:

<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-log4j12</artifactId> 
<version>1.5.10</version> 
<scope>provided</scope> 
</dependency> 

<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-log4j12</artifactId> 
<version>1.6.2</version> 
<scope>provided</scope> 
</dependency> 

Maven निर्भरता पेड़:

[INFO] [dependency:tree {execution: default-cli}] 
[INFO] org.mentawai:menta:war:1.0.5-SNAPSHOT 
[INFO] +- javax.servlet.jsp:jsp-api:jar:2.0:provided 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] +- javax.activation:activation:jar:1.1:compile 
[INFO] +- javax.mail:mail:jar:1.4:compile 
[INFO] +- javax.persistence:persistence-api:jar:1.0:compile 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.5.10:compile 
[INFO] | +- org.slf4j:slf4j-api:jar:1.5.10:compile 
[INFO] | \- log4j:log4j:jar:1.2.14:compile 
[INFO] +- org.hibernate:hibernate-core:jar:3.6.7.Final:compile 
[INFO] | +- antlr:antlr:jar:2.7.6:compile 
[INFO] | +- commons-collections:commons-collections:jar:3.1:compile 
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile 
[INFO] | +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile 
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile 
[INFO] | \- javax.transaction:jta:jar:1.1:compile 
[INFO] +- javassist:javassist:jar:3.12.1.GA:compile 
[INFO] +- junit:junit:jar:4.8.1:test 
[INFO] +- c3p0:c3p0:jar:0.9.1.2:compile 
[INFO] +- com.h2database:h2:jar:1.2.138:compile 
[INFO] +- mysql:mysql-connector-java:jar:5.1.13:compile 
[INFO] +- me.soliveirajr:mentawai:jar:2.3.3-SNAPSHOT:compile 
[INFO] | +- net.sf.json-lib:json-lib:jar:jdk15:2.3:compile 
[INFO] | | +- commons-beanutils:commons-beanutils:jar:1.8.0:compile 
[INFO] | | +- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] | | \- net.sf.ezmorph:ezmorph:jar:1.0.6:compile 
[INFO] | +- org.jdom:jdom:jar:1.1:compile 
[INFO] | +- com.thoughtworks.xstream:xstream:jar:1.3.1:compile 
[INFO] | | \- xpp3:xpp3_min:jar:1.1.4c:compile 
[INFO] | +- org.ajaxtags:ajaxtags:jar:1.2-beta3:compile 
[INFO] | | +- javax.servlet:jstl:jar:1.0.6:compile 
[INFO] | | +- taglibs:standard:jar:1.0.6:compile 
[INFO] | | \- net.htmlparser:jericho-html:jar:2.1:compile 
[INFO] | +- jgroups:jgroups-all:jar:2.2.9.1:compile 
[INFO] | +- me.soliveirajr:menta-container:jar:0.9.8:compile 
[INFO] | +- me.soliveirajr:menta-bean:jar:1.1.1:compile 
[INFO] | +- me.soliveirajr:menta-regex:jar:0.9.5:compile 
[INFO] | +- org.beanshell:bsh:jar:2.0b4:compile 
[INFO] | +- com.jolbox:bonecp:jar:0.7.1.RELEASE:compile 
[INFO] | | \- com.google.guava:guava:jar:r08:compile 
[INFO] | +- velocity:velocity-dep:jar:1.4:compile 
[INFO] | +- commons-fileupload:commons-fileupload:jar:1.2.2:compile 
[INFO] | +- commons-io:commons-io:jar:1.3.2:compile 
[INFO] | +- net.tanesha.recaptcha4j:recaptcha4j:jar:0.0.7:compile 
[INFO] | \- commons-dbcp:commons-dbcp:jar:1.4:compile 
[INFO] |  \- commons-pool:commons-pool:jar:1.5.4:compile 
[INFO] +- commons-lang:commons-lang:jar:2.5:compile 
[INFO] \- asm:asm:jar:3.2:compile 
+0

कृपया जो त्रुटि आप प्राप्त कर रहे हैं उसे जोड़ें। साथ ही, आपको अपने पीओएम में एसएलएफ 4 जे जोड़ना नहीं चाहिए क्योंकि अन्य निर्भरता इसका उपयोग करती हैं - अगर आपको सीधे इसका उपयोग करना है तो आपको इसे जोड़ना होगा।मेवेन ट्रांजिटिव निर्भरताओं का ख्याल रखता है और मुझे संदेह है कि यह 1.6 में खींच जाएगा और बोनेसीपी दुखी नहीं होगा। – SingleShot

+0

त्रुटि जोड़ा गया। मेरा मानना ​​है कि मुझे एसएलएफ 4 जे के कार्यान्वयन को जोड़ना है। तो समस्या यह है कि: हाइबरनेट को 1.6 कार्यान्वयन की आवश्यकता होती है। बोनेसीपी 1.5 की आवश्यकता है। वह संघर्ष है! बहिष्करण का उल्लेख करने के लिए – chrisapotek

उत्तर

28

लिंक त्रुटि संदेश में प्रदान की, "http://www.slf4j.org/codes.html#version_mismatch" में कहते हैं:

एक SLF4J बंधन slf4j-jdk14.jar या slf4j-log4j12.jar slf4j बाध्य करने के लिए उपयोग किया जाता है के रूप में एक विरूपण साक्ष्य में नामित एक अंतर्निहित प्रवेश ढांचे, जैसे कि, java.util.logging या log4j करने के लिए। slf4j-api.jar के विभिन्न संस्करणों मिश्रण मिश्रण और SLF4J बाध्यकारी समस्याएं पैदा कर सकता। उदाहरण के लिए, आप, slf4j-api-1.6.6.jar उपयोग कर रहे हैं तो आपको चाहिए भी उपयोग slf4j-सरल-1.6.6.jar, slf4j-सरल-1.5.5.jar का उपयोग कर नहीं होगा काम करते हैं।

नोट क्लाइंट के परिप्रेक्ष्य से slf4j-api के सभी संस्करण संगत हैं। Slf4j-api-N.jar के साथ संकलित क्लाइंट कोड किसी भी एन और एम के लिए slf4j-api-M.jar के साथ पूरी तरह ठीक है। आपको केवल की आवश्यकता है यह सुनिश्चित करें कि slf4j-api के आपके बाध्यकारी मैचों का संस्करण .jar। आप अपनी परियोजना में एक दिया dependendency द्वारा प्रयोग किया जाता slf4j-api.jar के संस्करण के बारे में चिंता करने की जरूरत नहीं है। आप हमेशा slf4j-api.jar के किसी भी संस्करण का उपयोग कर सकते हैं, और जब तक slf4j-api.jar और उसके बाध्यकारी मैच के संस्करण के रूप में, आपको ठीक होना चाहिए।

आपको अपने pom.xml में SLF4J के कुछ संस्करण slf4j-log4j12 पर निर्भरता घोषित करने की आवश्यकता है। मैं 1.6.6 का सुझाव दूंगा जो नवीनतम है। यह मैवेन के पारगमनशीलता नियमों के आधार पर आपकी परियोजना में slf4j-api के समान संस्करण को खींच देगा।

तो, बस अपनी pom.xml फ़ाइल में निम्नलिखित घोषित करें।

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

मैं यह सोचते हैं कि आप वास्तव में नहीं है प्रदान की दायरे में slf4j-api और slf4j-log4j12 घोषित करने के लिए की जरूरत है।

+12

एफवाईआई यह प्रतिक्रिया एसएलएफ 4 जे के लेखक से है। – SingleShot

4

बस SLF4J

के 1.5.10 संस्करण को बाहर निकालें
<dependency> 
     <groupId>...</groupId> 
     <artifactId>BoneCP</artifactId> 
     <version>...</version> 
     <exclusions> 
     <exclusion> <!-- declare the exclusion here --> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.10</version> 
     </exclusion> 
     </exclusions> 
    </dependency> 
+1

+1। @chrisapotek - आप वास्तव में BoneCP ** और ** Hibernate दोनों से SLF4J को एक्सक्लूस करना चाहते हैं, फिर मैन्युअल रूप से slf4j-api और slf4j-simple दोनों के लिए अपने पोम पर निर्भरता जोड़ें। यह निर्भरता के लिए निर्भरता संघर्ष से छुटकारा पाना चाहिए। – Perception

+0

कुछ गलत समझा जाता है: बोनसीपी बाध्य है (जरूरत) 1.5। यह एपीआई के लिए बाध्य है और कार्यान्वयन के लिए नहीं है जिसे आप ऊपर से बाहर करने की कोशिश कर रहे हैं। मुझे बोनसीपी के लिए अतिरिक्त कार्यान्वयन शामिल करने की आवश्यकता है। मैं BoneCP द्वारा उपयोग किए गए एपीआई संस्करण को स्विच नहीं कर सकता। एमवीएन निर्भरता जांचें प्रश्न में संपादित करने का प्रयास करें। – chrisapotek

0

मुझे एक ही त्रुटि मिली थी। असल में, कक्षापथ में slf4j जार के कई संस्करण होने से सावधान रहें।