在 第17分 2024-04-01 15:39 采纳率: 0%
浏览 6

MAVEN打包到spark集群

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/86152/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.1/log4j-slf4j-impl-2.11.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/junjun/spark-2.3.2-bin-hadoop2.7/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

img

img

img

请问这种错误应该怎么改啊

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-01 15:39
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 在程序运行时,出现“SLF4J: Class path contains multiple SLF4J bindings”的错误提示。其中,SLF4J是java日志框架之一,能够帮助开发者操控日志的输出,方便开发和调试。问题的错误提示意味着程序中存在多个SLF4J日志绑定的实现,导致冲突。如果不解决这个问题,可能会出现日志输出不正常的情况。 解决方案: 为了解决这个错误,我们需要让程序中只包含一个SLF4J绑定的实现。具体的步骤如下:
    1. 找到当前项目的pom.xml文件,在其中加入以下内容:
    <exclusions>
      <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
      </exclusion>
    </exclusions>
    
    1. 如果项目使用了Maven,则可以通过以下方法解决问题: 在项目的pom.xml文件中,找到导致冲突的SLF4J绑定的依赖,然后将其排除掉。比如,如果程序中同时存在log4j-slf4j-impl和slf4j-log4j12-1.7.16,我们可以将slf4j-log4j12-1.7.16排除掉。当然如果需要使用log4j,就不能将log4j-slf4j-impl排除掉。
    <!-- 排除冲突项:slf4j-log4j12 -->
    <dependency>
      <groupId>group-id</groupId>
      <artifactId>artifact-id</artifactId>
      <version>version</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
      </exclusions>    
    </dependency>
    
    1. 如果程序没有使用Maven,则可以手动排除冲突项。在做这件事情之前,我们需要找到所有被绑定的实现,并将其从类路径中删除。比如,在上面的错误提示中,我们发现了两个被绑定的实现:
    SLF4J: Found binding in [jar:file:/C:/Users/86152/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.1/log4j-slf4j-impl-2.11.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/D:/junjun/spark-2.3.2-bin-hadoop2.7/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    

    我们可以找到这些文件,并将其从类路径中删除,解决冲突。 案例: 以下是一个Maven项目的pom.xml文件的示例。我们可以在其中加入排除冲突项的代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
      <!-- 其他依赖项 -->
      <!-- 这个项可能会导致冲突 -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.26</version>
      </dependency>
    </dependencies>
    <!-- 排除冲突项 -->
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.26</version>
          <exclusions>
            <exclusion>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-api</artifactId>
            </exclusion>
            <exclusion>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    在这个例子中,我们使用dependencyManagement来排除冲突项。以slf4j-log4j12为例:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.26</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

    我们将slf4j-log4j12的slf4j-api和log4j依赖分别排除掉,以避免冲突。 如果我们想要直接将slf4j-log4j12从依赖中删除,我们也可以通过以下代码实现:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.26</version>
      <scope>provided</scope>
    </dependency>
    

    在这个例子中,我们将slf4j-log4j12的scope设置为provided,表示该依赖是由环境中的其他部分提供的,而不是项目本身提供的。因此,当我们编译和运行程序时,需要确保环境中已经提供了该依赖。这样,我们就可以避免冲突,同时也不会引入其他问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日

悬赏问题

  • ¥15 如何改进这个简易的模数转换程序
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法