类型为org.apache.lucene.codecs的SPI类,名为“Lucene54”的编解码器不存在

fae0ux8s  于 2022-11-07  发布在  Lucene
关注(0)|答案(5)|浏览(219)

使用lucene-core-5.5.2,我在weblogic服务器中遇到了问题。独立搜索应用程序工作正常,但当我部署为WEB应用程序时,它失败了,错误如下

Exception type is 'java.lang.ExceptionInInitializerError'. Runtime error: java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.Codec with name 'Lucene54' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classpath supports the following names: []

我尝试在classes/下创建文件夹结构,因为META-INF/services/添加了lucene-core-5.5.2.jar META-INF\services\目录中的所有文件,还为META-INF\services\创建了jar文件,并添加到类路径中,但它无法识别META-INF/services以加载SPI
任何帮助都将不胜感激。

8wtpewkr

8wtpewkr1#

请将以下文件添加到
文件夹:META-INF/services/
档案:org.apache.lucene.codecs.Codec
文字:org.apache.lucene.codecs.lucene54.Lucene54Codec
请查看https://anwaarlabs.wordpress.com/2017/02/25/lucene-an-spi-class-of-type-org-apache-lucene-codecs-codec-with-name-does-not-exist/上的解决方案及其详细说明

af7jpaap

af7jpaap2#

我用Gradle构建了这个版本,使用了一个建议的解决方案来构建一个“fat jar”(包含所有依赖jar的可执行jar)here
但这并没有奏效:我得到了这个模糊的错误与Lucene有关,但不是在测试或构建或正常运行时,而是在构建一个胖jar时。
我的解决方案是使用shadow jar:来自www.example.com的代码gradle.build:

buildscript {
    repositories { jcenter() }
    dependencies { // fatjar
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4' }
}
apply plugin: 'com.github.johnrengelman.shadow'
shadowJar {
    baseName = project.name
    classifier = null
    version = project.version
}
0mkxixxg

0mkxixxg3#

我将下面的代码添加到配置标记中

<transformers>
    <transformer  implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
        <resource>META-INF/services/org.apache.lucene.codecs.Codec</resource>
        <resource>META-INF/services/org.apache.lucene.codecs.PostingsFormat</resource>
    </transformer>
</transformers>

我还在dependencies标记的顶部添加了lucene-core dependency

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>5.5.0</version>
</dependency>
nlejzf6q

nlejzf6q4#

我在weblogic应用服务器类路径中添加了lucene jar,它按预期工作。我不知道为什么它没有从我的应用程序库文件夹中检测到,因为它也在类路径中,但看起来SPI不知何故需要应用服务器类路径上的jar和META-INF

u5i3ibmn

u5i3ibmn5#

请确保您的项目中包含的lucene jar与错误中提到的lucene codec版本相同。例如,如果错误声明为LuceneCodec 62,则您的项目中应包含lucene-6.x.x jar。

相关问题