使用 maven 和 spring boot 在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar
Posted
技术标签:
【中文标题】使用 maven 和 spring boot 在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar【英文标题】:Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path with maven and spring boot 【发布时间】:2014-11-02 10:29:24 【问题描述】:我不知道如何解决这个问题。请看一下,如果可能的话,让我如何解决它。这是我的 pom.xml 文件。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-2.1</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.8.9.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>15.0</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-2.0</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-1.9</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.bluepi.util.backup.glacier.Application</start-class>
<java.version>1.7</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
我基本上得到以下错误:
在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar,抢占 ***Error。
有关更多详细信息,另请参阅http://www.slf4j.org/codes.html#log4jDelegationLoop。
【问题讨论】:
可能重复:***.com/q/20117720/1144203 这将是一个重复的。但问题是我不知道应该对哪个依赖项应用排除项。 尝试该问题的第一个答案。 使用mvn dependency:tree
找出是什么在拉动什么。
谢谢 M. Deinum 这很有帮助。
【参考方案1】:
转到您的 pom.xml 并在底部选项卡上单击“依赖层次结构”选项卡。从那里搜索 log4j-over-slf4j。排除此依赖项的所有实例(右键单击该实例并“排除 Maven Artifact”)。在您不再出现 log4j-over-slf4j 并重新保存后,尝试运行该程序。如果它仍然不起作用,那么撤消您刚刚所做的更改(在开始时备份您的 pom.xml 可能很聪明)并排除 slf4j-log4j12 的所有实例。
我在使用 Apache Storm 时遇到了同样的问题。 . .一个可以工作而另一个不能工作的例子是 Storm 如何在运行时引入 log4j-over-slf4j,尽管我将“排除 log4j-over-slf4j”添加到storm-core依赖项
【讨论】:
不知道 Eclipse 提供了那个易于搜索的依赖层次结构选项卡。很棒 很好的答案!排除 slf4j-log4j12 为我工作的项目和 WebSphere 服务器与 Was 配置文件【参考方案2】:您可以通过在pom.xml
中添加"sl4j over log4j"
来解决问题
【讨论】:
我们把这个放在哪里?以上是关于使用 maven 和 spring boot 在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot graphql 在类路径中找不到 graphql 模式文件
使用 spring boot 和 spring-boot-maven-plugin 生成战争时排除 application.properties
Spring Boot + Kotlin + Gradle - 错误:在类中找不到主要方法
Spring Boot |在类路径资源中定义名为“entityManagerFactory”的bean时出错