gpt4 book ai didi

Maven - 同一依赖项的多个版本

转载 作者:行者123 更新时间:2023-12-03 01:39:04 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,其中的依赖项拉入两个名为:

  1. javassist-3.9.0.GA.jar
  2. javassist-3.20.0-GA.jar

当我打包 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 位于类路径上的第一个:该库向后兼容

我建议:

  • 如果这些依赖项是应用程序不同部分中的直接依赖项,请确保您在所有地方都使用相同的版本。最好的方法是修复父 POM 的 dependencyManagement 部分中的版本,然后省略依赖项部分中的版本属性。
  • 如果这些依赖项是传递依赖项,则排除您不想使用的依赖项,以确保您的最终应用程序中只有该库的一个版本。还可以考虑为仍然使用旧版本的项目提出问题,并要求他们升级依赖项的版本。
  • 如果您需要使用同一库的两个不兼容版本,并且它们具有相同的包和类名,请考虑使用 OSGi 等模块系统,它在某种程度上支持运行同一库的不同版本。

关于Maven - 同一依赖项的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com