【问题标题】:Elasticsearch Java API error "NoClassDefFoundError"Elasticsearch Java API 错误“NoClassDefFoundError”
【发布时间】:2016-02-26 14:42:06
【问题描述】:

我正在使用 Java API。我尝试了以下方法:

Client client = TransportClient.builder().build() 
 .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9200));

但它给了我以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError:       com/google/common/collect/ImmutableMap
at org.elasticsearch.client.transport.TransportClient$Builder.<init>(TransportClient.java:84)
at org.elasticsearch.client.transport.TransportClient.builder(TransportClient.java:76)
at tools.Tools.Searcher(Tools.java:195)
at tools.Tools.main(Tools.java:60)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 4 more
Java Result: 1

我使用的是 Elasticsearch 2.0.0,它在端口 9200 上运行

是什么导致了这个错误,我该如何解决?

【问题讨论】:

  • 在构建路径中似乎没有支持 jar(google-collections.jar)。
  • @Karthick 好的,我下载了 google-collections-1.0.jar 文件,并导入了import com.google.common.*;,但我仍然收到错误:Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.of(Ljava/lang/Obje...
  • 使用Maven之类的依赖管理工具来管理依赖而不是手动下载jar文件真是太好了。 Maven 将自动下载所有依赖项。您只需要添加像 org.elasticsearchelasticsearch2.0.0 这样的依赖项
  • @ShivanandPawar 我明白了。我最初想使用该解决方案,但我正在使用 java 应用程序。如何在 java 应用程序中添加此依赖项?我应该创建一个新的 Maven 应用程序,还是只添加一个 pom.xml 文件?
  • 您应该将您的项目转换为 maven 项目。如果您使用的是 eclipse,请检查此 link 或者如果您使用的是 Intellij,请检查此 link 以转换为 maven 项目。

标签: elasticsearch java


【解决方案1】:

您可以使用 Unirest API for Java。这是非常容易使用。

http://unirest.io/java.html

检查它的文档。我自己是初学者,我发现这很容易实现。

只需在您的 pom 文件中添加以下 maven 依赖项即可。

<dependency>
    <groupId>com.mashape.unirest</groupId>
    <artifactId>unirest-java</artifactId>
    <version>1.4.7</version>
</dependency>

你的java实现会是这样的:

HttpResponse<String> response = Unirest.get("http:localhost:9200").asString();

【讨论】:

    【解决方案2】:

    我也有这个问题,但是当我将 guava-18.0.jar 添加到构建路径时,它可以工作。希望它对你有用。

    【讨论】:

    • 你根本没用过 Maven?
    • 添加guava jar后报错Nov 26, 2015 12:00:44 PM org.elasticsearch.plugins.PluginsService &lt;init&gt; INFO: [Kraken] loaded [], sites [] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/util/Version at org.elasticsearch.Version.&lt;clinit&gt;(Version.java:44) at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:117)
    • 这意味着你缺少另一个jar,你可以粘贴错误信息的详细信息吗?当我添加番石榴罐时,它也有其他问题,但都是 NoClassDefFoundError,所以我一次又一次地检查它错过了什么罐子,并将丢失的罐子添加到构建路径中。好吧,我添加的jar如下,它可以工作:
    • 我添加的jar如下,它可以工作:commons-codec-1.9.jar,commons-logging-1.2.jar,elasticsearch-2.0.0.jar,guava-18.0.jar,jackson* .jar(所有jackson jar)、joda*.jar、jsr166e-1.1.0.jar、lucene-core-5.2.1.jar、netty-3.1.0.5.Final.jar、sheild-2.0.0.jar , t-digest-3.0.jar。这些 jar 可以在 elasticsearch zip 的 lib 目录中找到。如果你觉得麻烦,你可以将所有的 jar 添加到构建路径中
    • 我只是不断地为我得到的每个错误添加罐子,直到它起作用。我最终添加了大约 15 个 jar 文件。谢谢你:)
    猜你喜欢
    • 2023-03-27
    • 2014-08-24
    • 1970-01-01
    • 2015-02-10
    • 2012-03-16
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多