我有一个 Web 应用程序,其中的依赖项拉入两个名为:
- javassist-3.9.0.GA.jar
- javassist-3.20.0-GA.jar
当我将 WAR 打包在 WEB-INF/lib 目录中时,我的问题是应用程序正在运行以及为什么我不会遇到任何问题,因为显然我在两个 jar 中都有相同的类并且应该有问题对?
我有一个 Web 应用程序,其中的依赖项拉入两个名为:
当我将 WAR 打包在 WEB-INF/lib 目录中时,我的问题是应用程序正在运行以及为什么我不会遇到任何问题,因为显然我在两个 jar 中都有相同的类并且应该有问题对?
对于 Java,提供多少版本的类并不重要。默认类加载器只会选择它可以找到的类路径中的第一个。
由于您可以无错误地运行应用程序,这意味着以下情况之一:
如果 javassist-3.9.0.GA.jar 在类路径中首先出现:您的应用程序不依赖于 javassist-3.20.0-GA.jar 中的新 API 或错误修复此外,您使用的该库的 API 在这些版本之间没有更改(库不应该在次要版本之间做的事情)
如果 javassist-3.20.0-GA.jar 在类路径中首先出现:该库向后兼容
我建议:
回答“任何建议如何解决它?” 看看使用依赖树解决冲突。使用该命令mvn dependency:tree
,您将能够知道任何依赖项的来源。当您知道哪些工件依赖于 javassist 时,您可以添加一个排除条目以避免使用其中一个 javassist 版本。