Utilisation d'Intellij IDEA (version 2017.2.1) J'ai un projet Java / Maven dans lequel je souhaite inclure slf4j
avec le slf4j-binding
.
Je sais que StackOverflow est une multitude de questions sur slf4j
et sa liaison manquante, mais la plupart se réfèrent à Eclipse. Mon problème survient cependant sous Intellij.
Dans la liste pom.xml
I sous <dependencies>
:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
Maintenant, quand je laisse Intellij construire un JAR d'artefact et que j'exécute le JAR à partir de la ligne de commande, j'obtiens l'erreur (redoutée):
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
Après inspection, le JAR ne contient en effet pas de classes slf4j-simple
(slf4j
classes sont cependant présentes). Comment puis-je résoudre ce problème et demander à Intellij d'incorporer slf4j-simple comme indiqué dans le pom.xml
?
Pour être complet, voici le projet complet pom.xml
Intellij utilise:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>au.gov.acic.travelalert</groupId>
<artifactId>extract-data</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency> <dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
</dependencies>
</project>
Note finale: Au début, lorsque j'ai configuré la journalisation du projet, cela ne fonctionnait même pas dans l'EDI , malgré les entrées correctes dans pom.xml
. Mais d'une manière ou d'une autre, après avoir ajouté (et supprimé ultérieurement) une entrée de dépendance pour slf4j-log4j12
, l'EDI récupère le slf4j-simple
, mais ne le regroupe toujours pas lors de l'écriture du JAR de l'artefact ...
2 réponses
Exécuter la dépendance mvn: arborescence et vérifier:
- slf4j-api et slf4j-simple doivent y être présents.
- Aucune autre bibliothèque de liaison slf4j ne doit être présente
- Des ponts slf4j peuvent être présents (ceux qui se terminent par le suffixe "-slf4j" sur le nom de la bibliothèque; par exemple, log4j-over-slf4j).
- s'assurer que toutes les versions de la bibliothèque slf4j correspondent
- assurez-vous qu'aucune bibliothèque slf4j en double avec une version différente.
Si tout cela est correct, aucune raison pour slf4j-api n'est présent sur l'artefact mais pas slf4j-simple. Que faites-vous pour empaqueter jar?
Vous pouvez essayer cette solution; allez dans le répertoire home
et supprimez le répertoire .m2
(caché) pour mettre à jour le projet maven et essayez de reconstruire. et vérifiez également votre version eclipse si vous utilisez la version (Indigo, Juno et Kepler) de eclipse la mise à niveau avec la dernière version ou encore si vous souhaitez y travailler, vous pouvez vous référer ci-dessous comme; ce lien stackoverflow ayant la réponse la plus valable à ce problème:
SLF4J: échec du chargement de la classe "org.slf4j.impl .StaticLoggerBinder ". erreur Question de Konstantinos Margaritis
et réponse de nombreux experts Java.
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].