检测到类path上的log4j-over-slf4j.jar和slf4j-log4j12.jar,抢占StackOverflowError。

我在我的项目中使用了xuggle library来将video从mp4 to flv转码mp4 to flv 。 我也使用slf4j libraries来支持日志logging结束。

 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文件作为库来解决日志logging问题。 是否有人面临同样的问题。如果这么好心地写出build议或解决scheme来摆脱这个混乱。 提前致谢。

所以你必须排除冲突依赖。 尝试这个:

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

这解决了与slf4j和Dozer相同的问题。

我得到了解决scheme

在这里下载Xuggler 5.4

和一些更多的jar子,使其工作…

公共-CLI-1.1.jar

公地郎2.1.jar

的logback经典-1.0.0.jar

的logback核-1.0.0.jar

SLF4J-API-1.6.4.jar

参考图书馆

你可以从这里检查xuggler需要的依赖:

将这个jar和xuggle-xuggler-5.4.jar添加到您的项目的构buildpath中,并准备就绪。

**版本号可能会更改

你问是否可以改变这些slf4j类中的循环依赖检查。

简单回答是不。

  • 这是无条件的…被执行。
  • 它是在一个static初始化块中实现的…所以你不能覆盖实现,而且你不能停止它的发生。

所以改变这个的唯一方法是下载源代码,修改核心类来“修复”它们,构build和使用它们。 这可能是一个坏主意(一般),在这种情况下可能不是解决办法; 即您可能会触发消息警告的堆栈溢出问题。

参考:

  • 源代码 。

真正的解决scheme(正如你在Answer中所确定的)是使用正确的JAR。 我的理解是,检测到的循环是真实的,可能是有问题的…而且是不必要的。

尝试加载所有这些jar文件

在这里输入图像说明

search他们在谷歌

xuggle不需要log4j