我有一个旧的整体应用程序,它使用elasticsearch 1.X,现在我们需要在同一应用程序中运行elasticsearch 7.X,以便在两个版本的elasticsearch中具有相同的应用程序索引和查询数据。
在我的项目中,有多个模块,它们都有自己的POM和父POM,而我使用elasticsearch 7.X的新模块依赖于某些使用1.X的模块。
虽然我已经排除了使用 7.X 的模块中的 1.X 特定依赖项,但它仍然给出了以下错误:
[76B7CCD2] java.lang.NoSuchFieldError: LATEST at org.elasticsearch.Version.(Version.java:49) at org.elasticsearch.common.io.stream.StreamInput.(StreamInput.java:114)
经过大量研究并使用 this和 this链接,正如所解释的,我排除了弹性 1.x 依赖项,但看起来仍然像我的其他子模块仍然具有 ES 1.X 并且这也是必需的,因此我的应用程序的整体类路径具有两个版本 org.elasticsearch.Version
来自同一个包 org.elasticsearch
的 java 类,我认为这是根本原因。
现在,如何从同一库的两个不同版本的同一包中包含相同的类。
最佳答案
你不能。您只能拥有一个具有给定完整限定名称(包 + 名称)的类。
您可以尝试使用 Maven 阴影插件(实际上从未尝试过)对其中一个包进行阴影处理(即重命名它),这可能会起作用。
通常,您需要更改代码并进行修改,直到找到适用于所有依赖项的 Elasticsearch 版本。
关于java - 使用maven在java应用程序中运行两个版本的elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739284/