使用 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时出错

使用 Maven 创建应用程序的 Spring 和 Spring Boot 变体

使用 Gradle 和 Spring Boot 时无法发布到本地 maven 存储库