Elasticsearch:安装插件后出现 NoClassDefFoundError
Elasticsearch: NoClassDefFoundError after installed plugin
自己写了一个tokenizer插件,用maven编译成功。并且 elasticsearch 运行 安装好之后。但是当我尝试用它来分割句子时,我收到如下错误信息:
java.lang.NoClassDefFoundError: com/github/kevinsawicki/http/HttpRequest
at org.elasticsearch.thulac.MyTokenizer.thulacSeg(MyTokenizer.java:32)
at org.elasticsearch.thulac.MyTokenizer.<init>(MyTokenizer.java:64)
at org.elasticsearch.thulac.MyAnalyzer.createComponents(MyAnalyzer.java:12)
at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113)
at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:182)
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:230)
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:60)
at org.elasticsearch.action.support.single.custom.TransportSingleCustomOperationAction$AsyncSingleAction.run(TransportSingleCustomOperationAction.java:161)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
我用的是kevinsawicki/http-request。是不是我没有把http-request jar放到elasticsearchjava路径下?如果需要我应该把它放在哪里?
谢谢。
是的,你需要提供你的jar文件到elasticsearch的lib文件夹中。
在哪里?这取决于 elasticsearch 的安装位置。例如。使用 find / -type d -name elasticsearch
查找目录。在 Centos 上它是 /usr/share/elasticsearch/
,其中包含一个 lib
子文件夹。或者更舒服:
- 在 Debian 系统上,您可以使用
dpkg -L elasticsearch
和
- 基于rpm的系统,如Centos、RedHat、Suse等,您可以使用
rpm -ql elasticsearch
查找。
尝试在此 lib
文件夹中部署您的代码和所有依赖库。
自己写了一个tokenizer插件,用maven编译成功。并且 elasticsearch 运行 安装好之后。但是当我尝试用它来分割句子时,我收到如下错误信息:
java.lang.NoClassDefFoundError: com/github/kevinsawicki/http/HttpRequest
at org.elasticsearch.thulac.MyTokenizer.thulacSeg(MyTokenizer.java:32)
at org.elasticsearch.thulac.MyTokenizer.<init>(MyTokenizer.java:64)
at org.elasticsearch.thulac.MyAnalyzer.createComponents(MyAnalyzer.java:12)
at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113)
at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:182)
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:230)
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:60)
at org.elasticsearch.action.support.single.custom.TransportSingleCustomOperationAction$AsyncSingleAction.run(TransportSingleCustomOperationAction.java:161)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
我用的是kevinsawicki/http-request。是不是我没有把http-request jar放到elasticsearchjava路径下?如果需要我应该把它放在哪里?
谢谢。
是的,你需要提供你的jar文件到elasticsearch的lib文件夹中。
在哪里?这取决于 elasticsearch 的安装位置。例如。使用 find / -type d -name elasticsearch
查找目录。在 Centos 上它是 /usr/share/elasticsearch/
,其中包含一个 lib
子文件夹。或者更舒服:
- 在 Debian 系统上,您可以使用
dpkg -L elasticsearch
和 - 基于rpm的系统,如Centos、RedHat、Suse等,您可以使用
rpm -ql elasticsearch
查找。
尝试在此 lib
文件夹中部署您的代码和所有依赖库。