it-swarm.com.de

Erkannte sowohl log4j-over-slf4j.jar als auch slf4j-log4j12.jar im Klassenpfad, wodurch StackOverflowError verdrängt wurde.

Ich habe xuggle library in meinem Projekt verwendet, um das Video von mp4 to flv..__ zu transcodieren. Ich habe slf4j libraries auch verwendet, um das Protokollierungsende zu unterstützen.

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) ;

    }

}

Hier bekomme ich einen Fehler 

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

Ich habe beide JAR-Dateien als Bibliotheken verwendet, um Protokollierungsprobleme zu lösen. Hat jemand das gleiche Problem? Wenn dies so nett ist, schreiben Sie einen Vorschlag oder eine Lösung, um aus diesem Schlamassel zu kommen .. Vielen Dank im Voraus. 

50
Yuvraj Kakkar

Daher müssen Sie Konfliktabhängigkeiten ausschließen. Versuche dies:

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

Dies löste dasselbe Problem mit slf4j und Dozer.

67
Tomas Hanus

Sie haben gefragt, ob die zirkulare Abhängigkeitsprüfung in diesen slf4j-Klassen geändert werden kann.

Die einfache Antwort lautet nein.

  • Es ist bedingungslos ... wie umgesetzt.
  • Es ist in einem static-Initialisierungsblock implementiert ... Sie können die Implementierung also nicht überschreiben und nicht verhindern, dass dies geschieht.

Die einzige Möglichkeit, dies zu ändern, wäre, den Quellcode herunterzuladen, die Kernklassen so zu ändern, dass sie "repariert" werden, sie erstellen und verwenden. Das ist wahrscheinlich eine schlechte Idee (im Allgemeinen) und wahrscheinlich keine Lösung in diesem Fall. es besteht das Risiko, dass Sie das Stapelüberlaufproblem auslösen, vor dem die Nachricht warnt.

Referenz:


Die wirkliche Lösung (wie Sie in Ihrer Antwort festgestellt haben) ist die Verwendung der richtigen JARs. Nach meinem Verständnis ist die Zirkularität, die entdeckt wurde, real und möglicherweise problematisch ... und unnötig.

2
Stephen C

Für gradle

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

Und für SBT: excludeDependencies += "log4j" % "log4j"

1
Ismail H

Ich habe die Lösung bekommen 

laden Sie Xuggler 5.4 hier herunter

und noch ein Glas, damit es funktioniert ...

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

Welche Abhängigkeiten Xuggler braucht, können Sie hier überprüfen:

Fügen Sie diese Gläser und xuggle-xuggler-5.4.jar zum Erstellungspfad Ihres Projekts hinzu, und es ist fertig.

** Versionsnummern können sich ändern

1
Yuvraj Kakkar

Es ist ein ähnlicher Fehler aufgetreten, wie ich ihn gelöst habe:

  1. Auf die Projekt-Explorer-Ansicht auf Netbeans zugreifen IDE 8.2. Fahren Sie mit Ihrem Projekt unter Abhängigkeiten fort, bewegen Sie den Mauszeiger über log4j-over-slf4j.jar, um anzuzeigen, welche Abhängigkeiten indirekt importiert wurden (siehe unten).  enter image description here

  2. Klicken Sie mit der rechten Maustaste auf eine Import-JAR-Datei, und wählen Sie Abhängigkeit ausschließen  enter image description here

  3. Öffnen Sie zur Bestätigung die Datei pom.xml. Das Ausschlusselement wird wie folgt angezeigt.

 enter image description here 4. Starten Sie die Neuinstallation von maven und führen Sie Ihr Projekt aus. Viel Glück!

0
Dun0523

Die oben angegebene SBT-Lösung hat bei mir nicht funktioniert. Was bei mir funktioniert hat, ist ausschließlich slf4j-log4j12

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