gpt4 book ai didi

maven - Web应用程序中的Elasticsearch Java API错误:java.lang.NoClassDefFoundError:无法初始化类org.elasticsearch.threadpool.ThreadPool

转载 作者:行者123 更新时间:2023-12-02 23:29:32 25 4
gpt4 key购买 nike

我无法通过JSP使用Elasticsearch Java API。在下面,我试图解释我所做的事情。 :|

我已经按照 flex 指令在系统上安装了elasticseach 2.3.3,并在命令提示符下运行了它。一切工作正常。可能有用的说法是,我更改了来自elasticsearch.yml的以下参数。

cluster.name: cluster_233
node.name: node_233
bootstrap.mlockall: true
network.host: 127.0.0.1

然后,使用Netbeans,我创建了一个Maven项目-> Web应用程序项目,并在pom.xml中设置以下依赖项:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
<type>jar</type>
</dependency>

另外,我已经将Guava版本18依赖项添加到项目中,然后通过右键单击 依赖项并选择 下载声明的依赖项来下载所有项目依赖项。然后创建一个Java类并编写以下代码:
package com.mycompany.esmaven;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;

public class aClass {

public String test() throws Exception {

String str = tryToIndex();

String dfd = "";
return str;
}

public String tryToIndex() throws Exception {

Node node = NodeBuilder.nodeBuilder().settings(
Settings.builder()
.put("path.home", "d:/elasticsearch-2.3.3")
.put("cluster.home", "cluster_233")

).node();

Client client = node.client();
client.prepareIndex("kodcucom", "article", "1")
.setSource(putJsonDocument("ElasticSearch: Java API",
"ElasticSearch provides the Java API, all operations "
+ "can be executed asynchronously using a client object.",
new Date(),
new String[]{"elasticsearch"},
"Hüseyin Akdoğan")).execute().actionGet();
node.close();

return "Done";
}

public static Map<String, Object> putJsonDocument(String title,
String content, Date postDate, String[] tags, String author) {

Map<String, Object> jsonDocument = new HashMap<String, Object>();
jsonDocument.put("title", title);
jsonDocument.put("conten", content);
jsonDocument.put("postDate", postDate);
jsonDocument.put("tags", tags);
jsonDocument.put("author", author);
return jsonDocument;
}

}

并通过一个jsp页面尝试调用 test()函数(我将把elasticsearch与Web应用程序集成)。在首次加载项目后,总是会出现以下错误:
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

刷新页面后,错误上下文将更改为:
java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool

这是POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ISTEX</groupId>
<artifactId>mvnESwebapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>mvnESwebapp</name>

<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

另外,我想提到的是,通过此POM,我可以从 main函数索引我的JSON。但是问题是我不知道如何通过 JSP页面运行应用程序。

非常感谢您分享您的知识。

问候,
阿敏

最佳答案

FWIW,我遇到了与上述相同的问题-也就是说,我看到的错误消息是作者描述的线程池初始化错误。以下链接中描述的解决方案为我解决了这个问题:
https://discuss.elastic.co/t/could-not-initialize-class-org-elasticsearch-threadpool-threadpool/47575

每个评论建议已更新:
就我而言,解决方法是在我的POM文件中添加一个 Guava 依赖项。我使用了上面链接中网页中给出的依赖关系:

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>

至少就我而言,这解决了问题。

关于maven - Web应用程序中的Elasticsearch Java API错误:java.lang.NoClassDefFoundError:无法初始化类org.elasticsearch.threadpool.ThreadPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com