深度探究依赖冲突 NoSuchMethodError 问题解决之道

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

该文章讲述了一个Java应用程序在运行时出现了NoSuchMethodError错误的问题。经过多次定位和排查,最终发现是由于一个依赖包中的guava版本与应用程序中的版本不一致导致的。文章提供了四种解决方案,包括移除依赖包、升级依赖包、调整类加载顺序和使用特定版本的依赖项。最后总结了问题排查的几个要点,包括分析日志和异常信息、了解依赖关系、查看依赖项和逐步分析和排查问题。

🎯

关键要点

  • 文章讨论了Java应用程序运行时出现NoSuchMethodError错误的问题。

  • 错误是由于依赖包中的guava版本与应用程序中的版本不一致导致的。

  • 提供了四种解决方案:移除依赖包、升级依赖包、调整类加载顺序和使用特定版本的依赖项。

  • 问题排查要点包括分析日志和异常信息、了解依赖关系、查看依赖项和逐步分析问题。

  • 通过多次定位,发现hive-exec包中嵌入了不兼容的guava版本。

  • Maven Shade Plugin将所有依赖合并为一个shadow JAR,导致传统的<exclusion>无法剥离guava依赖。

  • 推荐的处理方案是升级hive-exec到3.x版本或使用特定版本的依赖项。

  • 总结了问题排查的关键点,包括日志分析、依赖关系理解和逐步排查。

延伸问答

什么是NoSuchMethodError错误?

NoSuchMethodError错误是指在运行时找不到某个方法,通常是由于类或依赖版本不匹配导致的。

导致NoSuchMethodError错误的主要原因是什么?

主要原因是依赖包中的guava版本与应用程序中的版本不一致。

如何解决NoSuchMethodError错误?

可以通过移除依赖包、升级依赖包、调整类加载顺序或使用特定版本的依赖项来解决。

在排查NoSuchMethodError错误时需要注意哪些要点?

需要分析日志和异常信息、了解依赖关系、查看依赖项并逐步分析问题。

Maven Shade Plugin的作用是什么?

Maven Shade Plugin用于创建包含所有依赖项的fat JAR或shadow JAR,以便独立运行。

如何使用<classifier>标签指定特定版本的依赖项?

可以在Maven依赖项中使用<classifier>标签来指定要使用的特定版本或变种的依赖项。

➡️

继续阅读