1. ホーム
  2. java

[解決済み] クラスパス上でlog4j-over-slf4j.jarとslf4j-log4j12.jarの両方を検出し、StackOverflowErrorを先取りしました。

2022-02-19 01:18:47

質問

を使用しています。 xuggle library から動画をトランスコードするために、私のプロジェクトでは mp4 to flv . 私は slf4j libraries もログアウトに対応しています。

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

    }

}

ここで、エラーが発生します。

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

私は、ログの問題を解決するために、両方のjarファイルをライブラリとして使用しました。 もしそうなら、この混乱から抜け出すための提案や解決策を親切に書いてください。 事前にありがとうございます。

解決方法は?

そのため、競合する依存関係を除外する必要があります。これを試してみてください。

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

これで、slf4jとDozerで同じ問題が解決しました。