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?
Il y a deux solutions à cela:
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>
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:
Exécuter mvn dependency:tree
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
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>
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.
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'.
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.