ElasticSearch java.lang.IllegalStateException:jar地狱

时间:2016-02-11 07:44:56

标签: java eclipse elasticsearch

我之前能够运行我的应用程序但是从今天开始我尝试了一些实验时,它突然出现了jar地狱错误。我不知道这个例外是什么,现在我的项目不再适用了。这是错误原因:

44   [main] DEBUG org.elasticsearch.bootstrap  - examining jar: /usr/local/apache-tomcat-7.0.62/lib/annotations-api.jar
55   [main] DEBUG org.elasticsearch.bootstrap  - examining jar: /usr/local/apache-tomcat-7.0.62/lib/catalina-ant.jar
57   [main] DEBUG org.elasticsearch.bootstrap  - examining jar: /usr/local/apache-tomcat-7.0.62/lib/catalina-ha.jar
59   [main] DEBUG org.elasticsearch.bootstrap  - examining jar: /usr/local/apache-tomcat-7.0.62/lib/catalina-tribes.jar
62   [main] DEBUG org.elasticsearch.bootstrap  - examining jar: /usr/local/apache-tomcat-7.0.62/lib/catalina.jar
Exception in thread "main" java.lang.IllegalStateException: failed to load bundle [] due to jar hell
    at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:338)
    at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:109)
    at org.elasticsearch.node.Node.<init>(Node.java:146)
    at org.elasticsearch.node.Node.<init>(Node.java:128)
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:145)
    at com.elastic.Main.main(Main.java:38)
Caused by: java.lang.IllegalStateException: jar hell!
class: org.apache.catalina.util.Base64
jar1: /usr/local/apache-tomcat-7.0.62/lib/catalina-ant.jar
jar2: /usr/local/apache-tomcat-7.0.62/lib/catalina.jar
    at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:280)
    at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:186)
    at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:336)
    ... 5 more

为什么罐子会发生?我以前在开发人员生活中从未见过这个,而且我的应用程序在今天之前是可行的。我错过了实施弹性搜索的重要内容吗?这是我的代码段。

Settings.Builder settings = Settings.settingsBuilder();
        settings.put("path.home", Paths.get("").toAbsolutePath().toString() + File.separator + "resource" + File.separator + "elasticsearch-2.1.2");
        settings.put("cluster.name","mySearch");

        Node node = NodeBuilder.nodeBuilder().settings(settings).build().start(); 
        Client client = node.client();

欢迎任何帮助或线索,非常感谢

编辑1:

我没有使用VM参数来确定ES主路径,因为我需要在转移项目时将项目带入不同的路径和平台。

编辑2:

我尝试在VM参数中使用弹性主路径更改我的项目也将不再起作用,因为我确实遵循了此link提到的解决方案,但错误仍然存​​在。

2 个答案:

答案 0 :(得分:1)

尝试使用:

-Dtests.jarhell.check=false

备注:它适用于我的Elasticsearch 2.4。我看到了评论,它并非在所有Elasticsearch版本中都可用(请参阅Elasticsearch jar hell when writing integration tests

答案 1 :(得分:0)

我收到了与 catalina.jar 冲突的 catalina-ant.jar 相同的错误消息。因此,快速解决方法是将catalina-ant.jar重命名为 $ TOMCAT / lib 文件夹中的catalina-ant.jar.orig。

Tomcat仍在为我竞争,即使缺少一个库。