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 ...

-1
halloleo 11 août 2017 à 07:47

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?

0
albert_nil 11 août 2017 à 05:30

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.

-1
Anshul Sharma 11 août 2017 à 05:01