我在我的项目中使用了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文件用作库以解决日志记录问题。 有没有人遇到同样的问题。如果这样善意写出建议或解决方案来摆脱这个烂摊子。 提前致谢。
答案 0 :(得分:67)
因此您必须排除冲突依赖性。试试这个:
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
这解决了slf4j和Dozer的相同问题。
答案 1 :(得分:2)
您询问是否可以更改那些slf4j类中的循环依赖性检查。
简单的答案是否定的。
static
初始化程序块中实现的...因此您无法覆盖实现,也无法阻止它发生。因此,改变这种情况的唯一方法是下载源代码,修改核心类以“修复”它们,构建和使用它们。这可能是一个坏主意(一般而言),在这种情况下可能不是解决方案;即你有可能触发消息警告的堆栈溢出问题。
参考:
真正的解决方案(正如您在答案中指出的那样)是使用正确的JAR。我的理解是,检测到的循环性是真实的,可能存在问题......而且是不必要的。
答案 2 :(得分:1)
我得到了解决方案
在这里下载Xuggler 5.4
还有一些罐子可以让它起作用......
公地-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添加到项目的构建路径中并准备就绪。
**版本号可能会改变
答案 3 :(得分:1)
对于gradle
compile('org.xxx:xxx:1.0-SNAPSHOT'){
exclude module: 'log4j'
exclude module: 'slf4j-log4j12'
}
答案 4 :(得分:1)
对于SBT:excludeDependencies += "log4j" % "log4j"
答案 5 :(得分:0)
遇到类似的错误,这就是我的解决方法:
答案 6 :(得分:0)
slf4j-log4j12
//dependencies with exclusions
libraryDependencies ++= Seq(
//depencies
).map(_.exclude("org.slf4j","slf4j-log4j12"))
答案 7 :(得分:0)
必须排除log4j-over-slf4j
<dependency>
....
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>