gpt4 book ai didi

java - 部署具有多个依赖项版本的多模块 Tomcat 应用程序

转载 作者:行者123 更新时间:2023-11-28 22:55:00 33 4
gpt4 key购买 nike

我在 Tomcat 中部署了一个 Web 应用程序,其中有两个模块具有自己的依赖项。我遇到了一个问题,模块 A 中的一个库的依赖版本比模块 B 中的另一个库所需的版本旧得多。例如,这里是 pom 文件中的依赖项:

模块 A:

<dependencies>
<dependency>
<groupId>org.example.com</groupId>
<artifactId>libraryA</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

模块 B:

<dependencies>
<dependency>
<groupId>org.another.com</groupId>
<artifactId>libraryB</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

然后 libraryA 依赖于 libraryC 1.0 版,而 libraryB 依赖于 libraryC 2.0 版。 libraryA 将无法与新版本的 libraryC 一起使用,而 libraryB 将无法与旧版本的 libraryC 一起使用。我有什么选择(如果有的话)让这些模块存在于同一个 Tomcat Web 应用程序中,使用这些依赖项的不同版本?

最佳答案

欢迎来到 jar hell 。首先,两个潜在的快速胜利:

  • 也许你可以选择一些中间版本的libraryC
  • 也许您可以将库 A 和库 B 迁移到最新版本的库 C。如果它是开源的,就做一个拉取请求

如果这不是一个选项,那么您将有更多的工作要做。经验法则:同一类不能有不同版本。没有 Elixir ,但有一些解决方法。

  • 拆分应用程序。微服务架构通常在这方面有所帮助,但需要大量基础设施(监控、部署、配置等)
  • 操作系统。我从来没有使用过它,所以我不知道你是否以及如何将它与 tomcat 集成,但 osgi 是一个更好的依赖管理平台(包括版本控制)
  • 重新包装。有一些工具可以获取 x.y.z 库的现有源代码(不确定编译类如何)并创建镜像库 a.b.c。在那一刻之后,他们有了不同的名字,所以他们可以轻松共存。它不适用于每个图书馆,因为其中一些图书馆使用反射来引用自己
  • 不同的类加载器。您可能会尝试使用一个类加载器加载应用程序中的几乎所有内容,libC v1 使用第二个,libC v2 使用第三个。但它可能需要一些定制,甚至可能需要定制类加载器。稍后您可能会遇到兼容性问题,因为类加载器 1 中的类 A 不是类加载器 2 中的类 A 的实例。

关于java - 部署具有多个依赖项版本的多模块 Tomcat 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906045/

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