在类路径上检测到log4j-over-slf4j.jar和slf4j-log4j12.jar,抢占StackOverflowError。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在类路径上检测到log4j-over-slf4j.jar和slf4j-log4j12.jar,抢占StackOverflowError。相关的知识,希望对你有一定的参考价值。
我在我的项目中使用了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:VIDEOFacebook.mp4";
private static final String outputFilename = "E:VIDEOFacebook.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的相同问题。
您询问是否可以更改这些slf4j类中的循环依赖性检查。
简单回答是不。
- 这是无条件的...已实施。
- 它是在
static
初始化程序块中实现的...因此您无法覆盖实现,并且无法阻止它发生。
因此,改变这种情况的唯一方法是下载源代码,修改核心类以“修复”它们,构建和使用它们。这可能是一个坏主意(一般而言),在这种情况下可能不是解决方案;即你有可能触发消息警告的堆栈溢出问题。
参考:
真正的解决方案(正如您在答案中所确定的)是使用正确的JAR。我的理解是,检测到的循环性是真实的并且可能存在问题......并且是不必要的。
我得到了解决方案
在这里下载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添加到项目的构建路径中并准备就绪。
**版本号可能会改变
为了gradle
compile('org.xxx:xxx:1.0-SNAPSHOT'){
exclude module: 'log4j'
exclude module: 'slf4j-log4j12'
}
而对于SBT:excludeDependencies += "log4j" % "log4j"
遇到类似的错误,这是我如何解决它:
- 在Netbeans IDE 8.2上访问Project Explorer视图。继续执行Dependencies下的项目,将光标悬停在log4j-over-slf4j.jar上,以查看间接导入的依赖项,如下所示。
- 右键单击导入jar文件,然后选择Exclude Dependency
- 要确认,请打开您的pom.xml文件,您将注意到排除元素,如下所示。
4.启动maven clean install并运行您的项目。祝好运!
以上是关于在类路径上检测到log4j-over-slf4j.jar和slf4j-log4j12.jar,抢占StackOverflowError。的主要内容,如果未能解决你的问题,请参考以下文章
[转] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
在类路径上未检测到 Spring WebApplicationInitializer 类型
Jboss 在类路径上没有检测到 Spring WebApplicationInitializer 类型
log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 解决过程