java - 使用maven在java应用程序中运行两个版本的elasticsearch
问题描述
我有一个遗留的单体应用程序,它使用elasticsearch 1.X,现在我们需要在同一个应用程序中运行elasticsearch 7.X,以便在两个版本的elasticsearch 中使用相同的应用程序索引和查询数据。
在我的项目中,有多个模块,它们都有自己的 POM 和父 POM,而我使用 elasticsearch 7.X 的新模块依赖于一些使用 1.X 的模块。
尽管我在使用 7.X 的模块中排除了 1.X 特定依赖项,但它仍然给我以下错误:
[76B7CCD2] java.lang.NoSuchFieldError: org.elasticsearch.common.io.stream.StreamInput.(StreamInput.java:114) 的 org.elasticsearch.Version.(Version.java:49) 的最新版本
经过大量研究并使用此链接和此链接后,正如所解释的,我排除了弹性 1.x 依赖项,但看起来仍然像我的其他子模块仍然具有 ES 1.X 并且也是必需的,因此总体类路径为我的应用程序具有org.elasticsearch.Version
来自同一个包的两个版本的java 类org.elasticsearch
,我认为这是根本原因。
现在,我如何从同一个库的两个不同版本的同一个包中包含同一个类。
解决方案
你不能。您只能拥有一个具有给定完整限定名称(包 + 名称)的类。
您可以尝试使用 Maven 遮罩插件(实际上从未尝试过)遮蔽其中一个包(即重命名它),这可能会起作用。
通常,您需要更改代码并摆弄,直到找到适用于所有依赖项的 elasticsearch 版本。
推荐阅读
- azure - 更改逻辑应用的位置(区域)?还是功能应用?应用服务计划和存储帐户?
- c++ - 如何在概念中使用 C++ requires 子句来要求成员变量满足概念约束?
- python - 在 MacOS 上使用 python 到 Accelerometer 的 I2C 接口
- ubuntu - 未通过代理连接时 Ubuntu VM 中的 DNS 解析问题
- php - DataTables 警告,请求第 0 行第 0 列的未知参数“ID”
- php - 为什么我在 PHP 中的 if 语句上出现错误,即使语句结构正确
- python - Python `inspect.stack()` 返回在 REPL 中缺少`code_context` 的 FrameInfo 对象
- python - FOREIGN KEY 约束失败,为什么会出现此错误?
- java - 如何在数组中按姓氏搜索?
- sorting - 将多个输入文件分类为单个输出文件,并带有尾标标记每个输入文件的结束位置?