web-dev-qa-db-fra.com

Plusieurs liaisons SLF4J provoquent une erreur?

J'ai un problème avec mon arbre de dépendance et plusieurs liaisons SLF4J. Ce que j’ai découvert jusqu’à présent, c’est que cela ne provoque généralement qu’un avertissement, mais dans mon cas, cela semble empêcher mon programme de lancer: Ce sont les exceptions que j’obtiens:

SLF4J: Le chemin de classe contient plusieurs liaisons SLF4J . SLF4J: Liaison trouvée dans [jar: fichier:/C: /Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/Org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Liaison trouvée dans [jar: fichier:/C: /Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/Org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Voir http://www.slf4j.org/codes.html#multiple_bindings pour une explication . SLF4J: slf4j-api 1.6.x (ou version ultérieure) est incompatible avec cette liaison . SLF4J: Votre liaison est la version 1.5.5 ou antérieure . SLF4J: Mettez à niveau votre liaison vers la version 1.6.x. ou 2.0.x Exception dans le fil "principal" Java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton () Lorg/slf4j/impl/StaticLoggerBinder;

et ceci est la pièce pertinente de mes dépendances: 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>

Quelqu'un peut-il me dire s'il vous plaît comment résoudre ce problème? 

11
Biffy

Il y a deux solutions à cela:

  • Assurez-vous que vous n'incluez qu'un seul fichier slf4j jar (probablement avec la version la plus récente) si vous en avez plusieurs versions différentes sur votre chemin de classe.
  • Parfois, il peut ne pas être possible d'exclure plusieurs fichiers jar slf4j, car ils peuvent être utilisés par d'autres fichiers jar en interne, qui se trouvent sur votre chemin de classe. Ces fichiers jar dépendants peuvent faire référence à différentes versions des fichiers jar slf4j, ce qui entraîne l'échec de votre application. Dans ce cas, assurez-vous que le fichier jar contenant la version supérieure de SLF4j est ajouté avant tout autre fichier jar utilisant les fichiers jar de SLF4J. Cela garantira que votre programme Java récupérera la dernière version du SLF4J, qui est évidemment compatible avec les versions antérieures.
23
Ankur Shanbhag

Si votre projet est dépendant d'un autre projet et que l'autre utilise également slf4j avec une version différente, essayez d'utiliser excusion  

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

La réponse de Fateh est correcte, j'ai du passer du temps à comprendre comment l'utiliser, c'est pourquoi j'ajoute une solution complète:

  1. Exécuter mvn dependency:tree

  2. découvrez quelle bibliothèque utilise slf4j:

    [INFO] +- net.lightbody.bmp:browsermob-proxy:jar:2.0-beta-8:compile
    [INFO] |  +- org.slf4j:slf4j-jdk14:jar:1.7.25:compile
    
  3. excluez-le de maven comme ceci:

         <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-proxy</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
2
Han Kai

Je suggère d'utiliser plutôt la dépendance suivante dans maven,

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

Cela a résolu mon problème bien que j'ai plus de dépendances utilisant slf4j.

1
t.rakesh

Lorsque plusieurs liaisons sont disponibles sur le chemin de classe, sélectionnez une et une seule liaison à utiliser, puis supprimez les autres liaisons.

Essayez de supprimer la dépendance explicitement ajoutée de 'org.slf4j' ou 'log4j2'. 

0
Akanksha Sharma

Cela se produit lorsqu'il y a plus d'un pot. Pour vérifier si le fichier jar est déjà disponible ou non, accédez à projet -> ressources Java -> dépendances maven et vérifiez si le fichier jar y est déjà disponible ou non. Si c'est disponible et que vous obtenez toujours l'erreur. Recherchez ensuite l'emplacement de ce fichier JAR dans le dossier .m2\Resources et supprimez le dossier complet lié à ce fichier JAR, puis téléchargez une version plus récente et importez-la dans votre projet. :)

Parfois, je reçois des erreurs même si j'ai téléchargé le bon fichier jar avec une bonne version dans mon fichier pom.xml. Ensuite, je dois le supprimer de mon fichier pom.xml et le télécharger à partir de Google, puis l'importer dans mon projet. Assurez-vous que si vous le faites, n'oubliez pas d'aller à Propriétés du projet -> onglet Assemblage de déploiement-> Cliquez sur Ajouter -> Entrées de chemin de construction Java et cliquez sur ce fichier JAR, puis cliquez sur Appliquer.

0
Hamza