gpt4 book ai didi

java - 在一个 Maven 项目中使用第 3 方 jar 的两个版本(存在代码冲突)

转载 作者:行者123 更新时间:2023-12-01 21:13:06 24 4
gpt4 key购买 nike

我们的 Maven 项目包括一个第三个 jar,它有两个不同的版本。

  • A-1.0.jar(在版本 2 中删除了函数 A())
  • A-2.0.jar(添加了函数 B()(版本 1 中没有))

如何组织我的代码以同时支持1.0的api和2.0的api?

最佳答案

实现此目的的一种可能方法是在项目中不依赖库 A(不是版本 1.0,也不是版本 2.0)。

您需要创建其他三个构建(例如 Maven)项目/工件,它们将是不同库版本的包装器。

您将拥有:

  • AbstractWrapper 项目工件
  • 版本 1 工件的包装
  • 版本 2 工件的包装

在 AbstractWrapper 中,您将拥有一个接口(interface)/抽象类,它可以从您要使用的库 A 中重现 api。这是将在主项目的依赖项中声明的唯一 [3 个] 工件。这个抽象包装器不依赖于您的项目,也不依赖于 lib A

然后每个包装器将依赖于 AbstractWrapper(以获取接口(interface)定义)和 A 库(版本 1 或版本 2)。

现在的棘手问题是让包装器实现(将在运行时可用)注册到您的主项目中。这在很大程度上取决于打包和运行时环境(独立 jar、osgi 包、servlet 规范 2.5-、servlet 规范 3.0+、springframework...),我让您对特定环境的插件注册进行一些研究。

您能想到的最丑陋的事情是尝试您所做的两种实现,并使用它找到的第一个实现(将您获得的类转换为抽象包装器接口(interface))。

最后,对于使用 1.0 版 lib A 的客户,您告诉他们依赖于您的主项目和 lib 版本 1 的包装器,而其他项目则依赖于您的主项目和 lib 版本2.

关于java - 在一个 Maven 项目中使用第 3 方 jar 的两个版本(存在代码冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40806630/

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