Hibernate-annotations 3.4.0.GA und slf4j?
Ich habe ein maven Projekt, dass die Nutzung der hibernate-annotations 3.4.0.GA, die die slf4j-api version 1.5.5 (geprüft durch die "dependency tree" in der pom.xml Datei). Ein weiteres Projekt gibt slf4j-log4j12 version 1.4.2 als Abhängigkeit.
Habe ich ein anderes maven Projekt B die abhängig von Projekt a In Projekt B, die ich angegeben haben die folgenden Abhängigkeiten:
slf4j-api version 1.6.1,
logback-core version 0.9.24
logback-classic version 0.9.24
welche builds gut mit maven von der Befehlszeile aus. Aber wenn ich das Projekt aus eclipse launch configuration bekomme ich:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/mm/.m2/repository/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/mm/.m2/repository/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding.
SLF4J: Your binding is version 1.5.5 or earlier.
SLF4J: Upgrade your binding to version 1.6.x. or 2.0.x
Dieser Meldung die angegebene zu, dass ich aktualisieren müssen, die verbindlich im Projekt zu 1.6.x, aber ich sehe nicht, wie das möglich ist, da mit den darin enthaltenen in der hibernate-Abhängigkeit.
Ist es möglich zu wechseln, die Bindung (Aktualisierung der classpath-info) beim ausführen von Projekt B, damit es mit der 1.6.1 version statt der version aus dem hibernate-Projekt?
InformationsquelleAutor u123 | 2010-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht empfohlen, Sie sollten die gleichen Versionen von slf4j Artefakte. Aus den FAQ:
Ist das etwas zu beheben.
Das problem ist, dass Sie die SLF4J-Artefakte von B und die aus Einem (transitiv) und du somit am Ende mischen mehrere Versionen der
slf4j-api
(1.5.5 und 1.6.1) und mehrere Bindungen (slf4j-log4j12
undlogback-classic
). SLF4J ist Sie beschweren sich über die spätere problem zur Laufzeit, sondern Sie sollten zu beheben.Ja, die Nachricht schlägt ein Upgrade einer Bindung zu einer neueren version. Aber, wichtiger ist, dass es Berichte, dass Sie mehr als EINE Bindung an den class-path: Sie müssen wählen zwischen log4j und logback als logging unterstützt und entsprechende verbindliche, aber nicht beide.
Streng beantworten dieser Frage über die Kontrolle der Versionen in transitiven Abhängigkeiten, kann dies durchgeführt werden, indem die
dependencyManagement
element. Hier ist ein Beispiel:Und Artefakte mit
slf4j-api
als Abhängigkeit, wie Hibernate EntityManager nutzen würde, version 1.6.1, wie unten gezeigt:Aber wie gesagt, das eigentliche problem ist, dass Sie brauchen, um nur eine Bindung auf dem classpath. Wählen Sie entweder log4j oder logback, nur nicht beides, und liefern die entsprechende Bindung.
Ja, alle Projekte, alle sollten die gleiche version. Nein, Sie müssen nicht die gleiche version wie Hibernate. Wie ich Ihnen sagte, können Sie Steuern, welche Versionen der Artefakte in transitiven Abhängigkeiten mit der
dependencyManagement
element und ich ein Beispiel. Es gibt keine Notwendigkeit zu warten, Hibernate, aktualisieren Sie die version, die Sie verwenden. Verwenden Sie einfach diedependencyManagement
element, das ist der Weg zu gehen.+1 für den FAQ-link
InformationsquelleAutor Pascal Thivent
Hatte ich dieses problem, aber nach dem Crawlen meine Abhängigkeitsstruktur und die Festlegung der meine pom war ich noch Probleme. Meine Lösung?
(nur falls jemand anderes mein Fehler!)
InformationsquelleAutor samspot