首页 > 其他分享 >spark SLF4J: Class path contains multiple SLF4J bindings.

spark SLF4J: Class path contains multiple SLF4J bindings.

时间:2023-07-16 18:36:14浏览次数:43  
标签:依赖 multiple 绑定 SLF4J 应用程序 slf4j 冲突 bindings

解决 "spark SLF4J: Class path contains multiple SLF4J bindings." 问题

1. 概述

当在 Spark 应用程序中出现 "spark SLF4J: Class path contains multiple SLF4J bindings." 错误时,这意味着在类路径上存在多个 SLF4J 绑定。SLF4J 是一个日志框架,用于在应用程序中记录日志。这个错误通常是由于应用程序中的多个依赖项引入了不同版本的 SLF4J 导致的。

为了解决这个问题,我们需要检查和解决冲突的依赖项,以确保只有一个 SLF4J 绑定被加载。

下面是解决这个问题的步骤:

步骤 操作
1. 确认错误的存在
2. 找出冲突的依赖项
3. 排除冲突的依赖项
4. 确保只有一个 SLF4J 绑定被加载
5. 测试修复后的应用程序

2. 解决步骤

步骤 1: 确认错误的存在

当应用程序出现 "spark SLF4J: Class path contains multiple SLF4J bindings." 错误时,我们需要确认这个错误存在。通常,这个错误会在应用程序启动时显示在控制台中。

步骤 2: 找出冲突的依赖项

为了找出冲突的依赖项,我们可以使用 Maven 或 Gradle 依赖树命令。以 Maven 为例,使用以下命令:

mvn dependency:tree -Dverbose

这将显示应用程序的依赖树,我们需要查找是否有多个版本的 SLF4J 导入。通常,冲突的依赖项将以类似以下的形式显示:

[INFO] \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] \- org.slf4j:slf4j-log4j12:jar:1.7.25:compile
[INFO]    \- log4j:log4j:jar:1.2.17:compile
[INFO]       \- org.slf4j:slf4j-api:jar:1.6.6:compile (version selected from conflict)

在上面的示例中,我们可以看到 slf4j-apislf4j-log4j12 使用了不同的版本。我们需要解决这个冲突。

步骤 3: 排除冲突的依赖项

为了排除冲突的依赖项,我们需要在应用程序的构建文件中添加排除配置。以 Maven 为例,在 pom.xml 文件中添加以下代码:

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

上面的代码将排除 slf4j-apilog4j 这两个依赖项,以确保只有一个版本被加载。

步骤 4: 确保只有一个 SLF4J 绑定被加载

为了确保只有一个 SLF4J 绑定被加载,我们需要在应用程序的类路径中删除其他 SLF4J 绑定。这意味着我们需要删除冲突的依赖项。

在使用 Maven 构建项目时,我们可以通过检查 .m2 目录中的依赖项来找到冲突的依赖项。找到冲突的依赖项后,可以通过在 pom.xml 文件中删除或更新相应的依赖

标签:依赖,multiple,绑定,SLF4J,应用程序,slf4j,冲突,bindings
From: https://blog.51cto.com/u_16175451/6739270

相关文章

  • SLF4J 日志框架与 SpirngBoot
    SLF4J是一个相对成熟的日志框架,它基于外观模式(门面模式)实现了插拔式的日志实现替换功能,而且还提供了其他日志框架的迁移方案。迁移方案目的依赖库备注将ApacheCommonsLogging框架打印的日志桥接至SLF4J框架jcl-over-slf4j需要在构建工具中排除jcl的......
  • 直播平台搭建源码,multiple-select 单选框多选框的用法
    直播平台搭建源码,multiple-select单选框多选框的用法         <divclass="row">            <divclass="col-sm-11">              <divclass="input-group">            ......
  • python: multiple inheritance
    多继承"""Mother.py多继承类inheritedAnimalpython(类名)superjava继承可以使用extends和implements这两个关键字来实现继承C++:public类名C#:类名可以重写父类方法edit:geovindu,GeovinDudate:20230702IDE:PyCharm2023.1.2"""importsysimportosi......
  • 自定义MultipleViewResolver
    1.MultipleViewResolver.javaimportjava.util.Locale;importjava.util.Map;importorg.springframework.web.servlet.View;importorg.springframework.web.servlet.ViewResolver;publicclassMultipleViewResolverimplementsViewResolver{privateMap<St......
  • SLF4J门面日志框架源码探索
    1SLF4J介绍SLF4J即SimpleLoggingFacadeforJava,它提供了Java中所有日志框架的简单外观或抽象。因此,它使用户能够使用单个依赖项处理任何日志框架,例如:Log4j,Logback和JUL(java.util.logging)。通过在类路径中插入适当的jar文件(绑定),可以在部署时插入所需的日志框架。如果要更......
  • tmux -- terminal multiplexer
    概念https://www.ruanyifeng.com/blog/2019/10/tmux.htmlSSH登录后,使用tmux可以保留回话,即使关闭终端。同一个回话可以被多个终端共享,分享屏幕,主机开启一个tmux,远程机器SSH登录主机,使用tmuxattach此回话。 命令行的典型使用方式是,打开一个终端窗口(terminalwindow,以下简......
  • go :Multiple-value strconv.Atoi() (int, error) in single-value context
    代码devicePositionType:=strconv.Atoi(info[0]["device_position_type"].(string))报错Multiple-valuestrconv.Atoi()(int,error)insingle-valuecontext这是因为返回的数据有两个参数,代码里只定义了一个,所以代码里需要再加上一个参数,这个参数一般会定义为errdevicePositi......
  • 快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
    一、快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)二、log4j2配置文件log4j2.xml文章目录一、简介二、日志门面三、SpringBoot使用Log4j2进行日志输出同步日志1、排除logback日志、导入log4j2依赖2、导入自定义log4j2.xml配置文件3.基础log4j2.xml配置文件异......
  • Searching for a String in Multiple Files
    常用命令:grep-r-n-B1-A1--include=*.cstrstr*findstr/S"MB_ICONHAND"*.h Everneedtosearchthroughallyourfilesforacertainwordorphrase?Idid,andtomakemattersmorecomplicated,thefileswereallindifferentsub-directories.......
  • 【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL
    ​ 目录 背景解决方案总结 背景        对于查询数据列表的功能,需要分页已经查询总数。这里涉及两句SQL,一个是查询分页对应的数据,第二个是Count(*);会导致部分重复代码和两次的数据库查询。 解决方案        Dapper有封装QueryMultipleAsync的......