Run two versions of elasticsearch in java application using maven

左心房为你撑大大i 提交于 2020-03-25 17:56:51

问题


I have a legacy monolith application, which uses elasticsearch 1.X and now we need to run elasticsearch 7.X in the same application, so that same application index and query data in both version of elasticsearch.

In my project, there are multiple modules and they all have their own POM and parent POM, and my new module which uses elasticsearch 7.X depends on some module which uses 1.X.

Although I have excluded 1.X specific dependency in module which uses 7.X, Still it gives me below Error:

[76B7CCD2] java.lang.NoSuchFieldError: LATEST at org.elasticsearch.Version.(Version.java:49) at org.elasticsearch.common.io.stream.StreamInput.(StreamInput.java:114)

After doing a lot of research and using this and this link, As explained I excluded the elastic 1.x dependency but still looks like as my other sub-module still has ES 1.X and which is required as well, hence overall classpath of my application has both versions of org.elasticsearch.Version java class from the same package org.elasticsearch, which I feel is the root cause.

Now, How can I include the same class from the same package from two different versions of a same library.


回答1:


You can't. You can only have one class with a given full qualified name (package + name).

You can try to shade one of the packages (i.e. rename it) with the Maven shade plugin (never tried that, actually), which might work.

Usually, you need to change code and fiddle around until you find a version of elasticsearch that works with all dependencies.



来源:https://stackoverflow.com/questions/57739284/run-two-versions-of-elasticsearch-in-java-application-using-maven

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!