PostingFormats的Elasticsearch NoClassDefFoundError

时间:2014-10-01 08:48:03

标签: java elasticsearch maven-assembly-plugin

尝试使用带有嵌入式弹性搜索的java创建索引时获取NoClassDefFoundError。

  • 版本Java 1.7和Elasticsearch 1.3.2
  • 使用maven程序集插件构建
  • 使用包含所有依赖项的jar运行

这是堆栈跟踪的片段: -

Caused by: java.lang.NoClassDefFoundError: Could not initialize class    org.elasticsearch.index.codec.postingsformat.PostingFormats
at   org.elasticsearch.index.codec.CodecModule.configurePostingsFormats(CodecModule.java:126)
  • 此类包含在弹性搜索的依赖jar中
  • 在类路径而不是jar上运行爆炸类时,不要出现此错误。
  • 已清除所有以前的快照和类等,以避免任何lib冲突。

这与elastisearch.jar中的META-INF / services文件夹有关,需要使用maven-shade-plugin

1 个答案:

答案 0 :(得分:0)

因此,各种lucene和elasticsearch jar的META-INF /服务中包含许多文件。其中一些文件具有相同的文件名,例如

org.apache.lucene.codecs.PostingsFormat

maven-shade-plugin通过将条目组合到一个文件中来解决此问题。实际的例外是IllegalArgEx,如

org.apache.lucene.codecs.memory.DirectPostingsFormat
无法从某些静态初始化的集合中加载