java - 使用maven在java应用程序中运行两个版本的elasticsearch

标签 java maven elasticsearch maven-shade-plugin

我有一个旧的整体应用程序,它使用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)

经过大量研究并使用 thisthis链接,正如所解释的,我排除了弹性 1.x 依赖项,但看起来仍然像我的其他子模块仍然具有 ES 1.X 并且这也是必需的,因此我的应用程序的整体类路径具有两个版本 org.elasticsearch.Version 来自同一个包 org.elasticsearch 的 java 类,我认为这是根本原因。

现在,如何从同一库的两个不同版本的同一包中包含相同的类。

最佳答案

你不能。您只能拥有一个具有给定完整限定名称(包 + 名称)的类。

您可以尝试使用 Maven 阴影插件(实际上从未尝试过)对其中一个包进行阴影处理(即重命名它),这可能会起作用。

通常,您需要更改代码并进行修改,直到找到适用于所有依赖项的 Elasticsearch 版本。

关于java - 使用maven在java应用程序中运行两个版本的elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739284/

相关文章:

eclipse - Eclipse 中的 Maven : step by step installation

java - 如何打包Akka项目

docker - docker Elasticsearch 5.6.10如何删除用户名和密码

java - 尽管同时实现了 hashCode() 和 equals(),但 HashSet 添加了重复条目

java - Xamarin - 使用 JavaScript 调用 Android 函数

java - 使用 maven-tomcat-plugin 启动多个 tomcat 实例

elasticsearch - 查询被索引词有空格的Elastic Search

php - 重新索引在ElasticSearch中添加新字段不起作用…(PHP客户端)

java - 在测试用例期间部署工件 - JBoss AS

java - Hibernate 标准,两个实体