解决:springboot项目访问hdfs文件提示guava版本不兼容

1、问题描述

版本说明:我用的hadoop版本:3.1.3

项目可以正常启动,但是调用访问hdfs的服务时候报错,报错消息如下:com.google.common.base.preconditions.checkArgument(ZL java/lang/String;Ljava/lang/Object:)V

原因分析:

  • java.lang.NoSuchMethodError:这个错误表示在运行时尝试调用一个不存在的方法
  • com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object:)V这个方法找不到,通常是是因为类路径(classpath)上有不兼容的版本

Apache Hadoop 使用 Guava 库(之前叫做 Google Collections),Guava 库中的 Preconditions 类提供了各种前置条件检查的方法。NoSuchMethodError 表明项目中包含的 Guava 库版本与 Hadoop 预期的版本不一致。可能的情况是,项目中包含了一个较旧或较新的 Guava 版本,而这个版本中没有 Configuration.java 文件中调用的那个特定方法签名。

2、解决方法

在项目的pom文件中加入与hadoop版本兼容的guava版本:

复制代码
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
3、补充知识
  • guava库:

Guava库是由Google开发和维护的一组开源的Java库,它提供了许多Google内部Java项目依赖的核心库。Guava库包含了大量用于集合、缓存、支持原语操作、并发库、通用注解、字符串处理、I/O等等的实用工具类和增强功能。使用Guava库可以帮助开发者写出更加简洁、可读性更强、更可靠的Java代码,同时提高代码质量,减少开发时间,并鼓励使用Java平台的最佳实践。因此,Guava库在Java开发者中非常受欢迎,是Java开发中不可或缺的工具之一。

相关推荐
谢亮_vipxieliang8 天前
ValidX vs Google Guava Preconditions:验证 vs 断言
java·spring boot·后端·spring cloud·hibernate·guava
吴声子夜歌11 天前
Guava——散列
java·guava
吴声子夜歌11 天前
Guava——并发(二)
java·网络·guava
吴声子夜歌11 天前
Guava——事件总线
java·网络·guava
吴声子夜歌11 天前
Guava——并发(一)
java·guava
吴声子夜歌11 天前
Guava——反射
java·开发语言·guava
吴声子夜歌12 天前
Guava——基本工具(二)
windows·python·guava
吴声子夜歌12 天前
Guava——基本工具(一)
windows·guava
吴声子夜歌12 天前
Guava——集合(二)
java·guava
吴声子夜歌12 天前
Guava——缓存
缓存·guava