web-dev-qa-db-fra.com

Détecté à la fois log4j-over-slf4j.jar ET slf4j-log4j12.jar sur le chemin de classe, préemptant StackOverflowError.

J'ai utilisé xuggle library dans mon projet pour coder la vidéo à partir de mp4 to flv. J'ai utilisé slf4j libraries également pour prendre en charge la journalisation.

import com.xuggle.mediatool.IMediaReader;
import com.xuggle.mediatool.IMediaViewer;
import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;

public class TranscodingExample {

    private static final String inputFilename = "E:\\VIDEO\\Facebook.mp4";
    private static final String outputFilename = "E:\\VIDEO\\Facebook.flv";

    public static void main(String[] args) {

        // create a media reader
        IMediaReader mediaReader = 
               ToolFactory.makeReader(inputFilename);

        // create a media writer
        IMediaWriter mediaWriter = 
               ToolFactory.makeWriter(outputFilename, mediaReader);

        // add a writer to the reader, to create the output file
        mediaReader.addListener(mediaWriter);

        // create a media viewer with stats enabled
        IMediaViewer mediaViewer = ToolFactory.makeViewer(true);

        // add a viewer to the reader, to see the decoded media
        mediaReader.addListener(mediaViewer);

        // read and decode packets from the source file and
        // and dispatch decoded audio and video to the writer
        while (mediaReader.readPacket() == null) ;

    }

}

Ici je reçois une erreur 

"Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.". 

J'ai utilisé les deux fichiers JAR en tant que bibliothèques afin de résoudre les problèmes de journalisation . Quelqu'un a-t-il été confronté au même problème.Si vous avez la bonté d'écrire une suggestion ou une solution pour sortir de ce désordre . Merci d'avance. 

50
Yuvraj Kakkar

Vous devez donc exclure les dépendances de conflit. Essaye ça:

<exclusions>
  <exclusion> 
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
  </exclusion>
  <exclusion> 
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
  </exclusion>
</exclusions> 

Cela a résolu le même problème avec slf4j et dozer.

67
Tomas Hanus

Vous avez demandé s'il était possible de modifier la vérification de la dépendance circulaire dans ces classes slf4j.

La réponse simple est non.

  • C'est inconditionnel ... tel que mis en œuvre.
  • Il est implémenté dans un bloc d'initialisation static ... afin que vous ne puissiez pas écraser l'implémentation et que vous ne puissiez pas l'arrêter.

La seule façon de changer cela serait donc de télécharger le code source, de modifier les classes principales pour les "réparer", les construire et les utiliser. C'est probablement une mauvaise idée (en général) et probablement pas une solution dans ce cas; vous risquez de provoquer le problème de débordement de pile que le message met en garde.

Référence:


La vraie solution (comme vous l'avez identifiée dans votre réponse) consiste à utiliser les bons fichiers JAR. D'après ce que je comprends, la circularité détectée est réelle et potentiellement problématique ... et inutile.

2
Stephen C

Pour le grade

compile('org.xxx:xxx:1.0-SNAPSHOT'){
    exclude module: 'log4j'
    exclude module: 'slf4j-log4j12'
}
1
okwap

Et pour SBT: excludeDependencies += "log4j" % "log4j"

1
Ismail H

J'ai la solution 

téléchargez Xuggler 5.4 ici

et un peu plus de bocal pour le faire fonctionner ...

commons-cli-1.1.jar

commons-lang-2.1.jar

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

slf4j-api-1.6.4.jar

Reference Libraries

Vous pouvez vérifier les dépendances dont xuggler a besoin à partir d'ici:

Ajoutez ces fichiers jar et xuggle-xuggler-5.4.jar au chemin de génération de votre projet, qui est prêt.

** les numéros de version peuvent changer

1
Yuvraj Kakkar

J'ai rencontré une erreur similaire, voici comment je l'ai résolue:

  1. Accéder à la vue Explorateur de projet sur Netbeans IDE 8.2. Passez à votre projet sous Dépendances, placez le curseur de la souris sur le fichier log4j-over-slf4j.jar pour afficher celles que les dépendances ont indirectement importées, comme indiqué ci-dessous.  enter image description here

  2. Cliquez avec le bouton droit sur un fichier JAR d'importation et sélectionnez Exclure la dépendance  enter image description here

  3. Pour confirmer, ouvrez votre fichier pom.xml, vous remarquerez l'élément d'exclusion comme ci-dessous.

 enter image description here 4. Lancez maven clean install et exécutez votre projet. Bonne chance!

0
Dun0523

La solution SBT indiquée ci-dessus n'a pas fonctionné pour moi. Ce qui a fonctionné pour moi, c'est d'exclure slf4j-log4j12

//dependencies with exclusions
libraryDependencies ++= Seq(
    //depencies
).map(_.exclude("org.slf4j","slf4j-log4j12"))
0
Arosha