首页 > 解决方案 > 异常:java.lang.IllegalArgumentException:不存在名为“Lucene410”的 org.apache.lucene.codecs.Codec 类型的 SPI 类

问题描述

我使用一个多模块 gradle 项目(12 个模块)。我继承了该项目,我需要更新其中使用的一些库的版本。

我无法理解此错误的原因:

    ... 67 more
Caused by: java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.Codec with name 'Lucene410' does not exist.  You need to add the corresponding JAR file supporting this SPI to your classpath.  The current classpath supports the following names: [Lucene54]
    at org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:114)
    at org.apache.lucene.codecs.Codec.forName(Codec.java:113)
    at org.apache.lucene.index.SegmentInfos.readCodec(SegmentInfos.java:469)
    ... 81 more

最初,对 Lucena 库的依赖显然没有包含在项目中。然而,在几个地方有一个直接链接到它的类:

    org.apache.lucene.search.Query lQuery = queryBuilder.keyword().onFields("name", "code").matching(name).createQuery();

我有:

注册表:

该库的一个版本在项目树中可见。而不仅仅是核心。

在此处输入图像描述

按照此处此处此处的建议,将“org.apache.lucene.codecs.Codec”文件添加到项目中,同时将显式依赖项(由于某种原因未出现在外部库树中)添加到 build.gradle模块,不提供任何东西。

编辑 1

这个依赖是从 Hibernate 库中检索的:

compile group: 'org.hibernate', name: 'hibernate-search-orm', version: '5.11.4.Final'

如果您用旧版本替换新版本,那么问题就会消失:

compile group: 'org.hibernate', name: 'hibernate-search', version: '5.3.0.Final'

但我想了解如何使用更新的版本。

编辑 2

仅在库版本“5.5.8.Final”(含)之前不会引发此异常。而且,“5.6.6.Final”和更新版本中的任何内容都不会再次出现。

标签: javahibernatelucene

解决方案


如果您不需要关心存储的索引,您可以简单地删除存储索引的系统文件夹的内容。 <property name="hibernate.search.default.indexBase" value="/var/lucene/indexes"/> 就我而言,它是 /var/lucene/indexes 文件夹


推荐阅读