我有一个Java Maven项目,其依赖项包括slf4j
及其log4j adapter
。
我根据http://mvnrepository.com管理log4j
,slf4j-log4j12
和slf4j-api
的最新版本,特别是1.2.17的log4j
版本远远超过1.2 .12但我仍然得到错误
SLF4J: This version of SLF4J requires log4j version 1.2.12 or later.
See also http://www.slf4j.org/codes.html#log4j_version
这对我来说完全不清楚。
My Maven依赖关系管理如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>apache-jena-libs</artifactId>
<type>pom</type>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
</dependencyManagement>
如何摆脱警告?
P.S。:我也得到java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()
。
P.P.S。:由于你的评论,我记得该程序有一个“lib”文件夹,它不是由Maven包含在类路径中,而是由Eclipse本身包含,所以冲突的依赖关系必须存在于那里。对不起,我完全忘记了我认为将Maven与lib文件夹混合是我的错。我想我必须尝试将尽可能多的库转换为maven依赖项。 奇怪的是,即使我编辑“订单和导出”以将Maven依赖项置于顶部,问题仍然存在。
答案 0 :(得分:6)
StaticLoggerBinder
代码很早就加载,执行检查以确定log4j中TRACE
级别是否可用。这是代码:
private StaticLoggerBinder() {
loggerFactory = new Log4jLoggerFactory();
try {
Level level = Level.TRACE;
} catch (NoSuchFieldError nsfe) {
Util.report("This version of SLF4J requires log4j version 1.2.12 or later."+
" See also http://www.slf4j.org/codes.html#log4j_version");
}
}
对我来说似乎很不透明。
可能是某些其他依赖项正在拉入或实际嵌入早期版本的log4j。已知一些* -standalone.jar 文件可以做到这一点。
在部署时检查您的类路径。您是否在应用服务器中部署?是服务器类路径上的旧版log4j吗?在java认可的路径?
答案 1 :(得分:0)
您应该在<dependency>
之外定义<dependencyManagement>
,如下所示: -
<dependencyManagement>
<dependencies>
...
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>apache-jena-libs</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
</dependencies>
有关详细信息,请参阅Introduction to the Dependency Mechanism: Dependency Management。
我希望这可能有所帮助。
答案 2 :(得分:0)
更改评论以回答,因为它似乎解决了这个问题。
这是一个类加载器问题,maven正确构建但缺少 依赖。你能尝试提供缺少的依赖项吗? 行家?否则我建议你看一下Eclipse特有的 的依赖关系。