2013-10-29 17 views
6

Mam problem z moim drzewem zależności i wieloma powiązaniami SLF4J. Co znalazłem do tej pory jest to, że zwykle to tylko powoduje ostrzeżenie, ale w moim przypadku wydaje się, aby zapobiec mój program z systemem: Są wyjątki uzyskać:Wiele powiązań SLF4J powoduje błąd?

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.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 Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

i jest to istotne kawałek mojego zależności: net.lightbody.bmp browsermob-proxy 2,0-beta-8

<!-- LOGGING DEPENDENCIES - LOG4J --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 

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

Czy ktoś mógłby mi powiedzieć jak rozwiązać ten problem?

+0

Dołączasz 'slf4j-log4j12' wiele razy (bezpośrednio lub pośrednio przez inną zależność) w różnych wersjach (1.5.3 i 1.6.1, zgodnie z komunikatem o błędzie). – Jesper

Odpowiedz

15

Istnieje kilka rozwiązań to:

  • Upewnij się, że zawierać tylko jeden slf4j słoik (prawdopodobnie z wyższej wersji), jeśli masz kilka z nich z różnych wersjach na ścieżce klasy.
  • Czasami może nie być możliwe wykluczenie wielu słoików slf4j, ponieważ mogą być używane przez inne słoiki wewnętrznie, które znajdują się na ścieżce zajęć. Te zależne słoiki mogą odnosić się do różnych wersji słoików slf4j, które powodują awarię aplikacji. W takich przypadkach, upewnij się, że masz słoik z wyższą wersją SLF4j dodaną przed innymi słoikami przy użyciu słoików SLF4J. To sprawi, że twój program java pobierze najnowszą wersję SLF4J, która oczywiście jest wstecznie kompatybilna.
+0

Dziękujemy! Drugie rozwiązanie sprawdziło się dla mnie. – Biffy

+0

@Ankur I jak zapewnić w czasie zaćmienia, że ​​odbierze najnowszą? –

+3

Najpierw określ najnowszą ścieżkę budowania projektu. Aby zweryfikować plik zamówienia .classpath zamówienia w projekcie. Pokaże kolejność dodawania plików jar. –

1

Proponuję użyć poniższy zależność w Maven zamiast

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.17</version> 
</dependency> 

ten rozwiązał mój problem, choć mam więcej zależności używając slf4j.

0

Jeśli projekt ma zależność od innych projektów, a drugi użytku slf4j jak również z wersją inny spróbuje użyć excusion

<exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
</exclusions> 
0

to występuje, gdy istnieje więcej niż jeden słoik. Aby sprawdzić, czy słoik jest już dostępny, czy nie, przejdź do projektu -> zasobów Java -> zależności między użytkownikami i sprawdź, czy słoik jest już tam dostępny. Jeśli jest dostępny i nadal pojawia się błąd. Następnie znajdź położenie tego pliku jar w folderze .m2 \ resources i usuń pełny folder powiązany z tym plikiem jar, a następnie pobierz nowszą wersję i zaimportuj ją do swojego projektu. :)

Kiedyś dostaję błędy, nawet jeśli mam pobrać właściwy plik jar z poprawną wersją w moim pliku pom.xml. Następnie muszę usunąć go z mojego pom.xml i pobrać ten słoik z Google i zaimportować go do mojego projektu. Upewnij się, że jeśli to zrobisz, nie zapomnij przejść do Właściwości projektu -> Zakładka Montaż -> Kliknij Dodaj -> Wstaw ścieżki Java i kliknij ten plik JAR i kliknij Zastosuj.