我在弄清楚如何在 GraphDB 中指定我自己的分析器实现时遇到问题。在阅读了文档和其他几篇文章后,我似乎遇到了 .jar 依赖项的问题。
为了构建样板CustomAnalyzer
和类,CustomAnalyzerFactory
我不得不使用位于. 我的 gradle 构建文件如下所示:lucene.jar
lucene-core.jar
lib/plugins/lucene
group 'com.example'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile fileTree(dir: 'libs/lucene', include: '*.jar')
}
注意:libs/lucene
是我的 gradle 项目中的文件夹,我在其中复制了graphdb 独立服务器发行版的lucene.jar
并lucene-core.jar
位于lib/plugins/lucene
在我编译代码并使用创建 jar 文件gradle clean jar
后,我将其复制到lib/plugins/lucene-connector
.
我重新启动 graph-db,进入连接器并尝试使用 UI 添加一个 lucene-connector。我设法一直到您可以指定分析仪的位置。但是,当我指定 com.example.CustomAnalyzer 时,我收到以下错误消息。
Caused by: java.lang.NoClassDefFoundError: org/apache/lucene/analysis/ASCIIFoldingFilter
经过一番挖掘,我发现有 2 个 lucene-core.jar 文件。一进一libs/plugins/lucene
进libs/plugins/lucene-connector
。lucene-core.jar
inlibs/plugins/lucene-connector
没有类ASCIIFoldingFilter
。
我什至尝试创建一个包含单个 jar 中的所有依赖项的 fatJar,但是当我这样做时,graphdb 无法加载任何连接器。
不太确定,我哪里出错了,感觉它与我如何构建和引用 jar 文件有关。
我还尝试从 CustomAnalyzer 中删除 ASCIIFilter,但得到了一组全新的错误:
Caused by: com.ontotext.trree.sdk.BadRequestException: Unable to instantiate analyzer class, only analyzers with a default constructor or a constructor accepting single Version parameter are possible: com.example.CustomAnalyzer
at com.ontotext.trree.plugin.externalsync.impl.lucene4.CreateAnalyzerUtil.instantiateAnalyzer(CreateAnalyzerUtil.java:70)
at com.ontotext.trree.plugin.externalsync.impl.lucene4.CreateAnalyzerUtil.createAnalyzerFromClassName(CreateAnalyzerUtil.java:42)
at com.ontotext.trree.plugin.externalsync.impl.lucene4.Lucene4ExternalStore.open(Lucene4ExternalStore.java:182)
at com.ontotext.trree.plugin.externalsync.impl.lucene4.Lucene4ExternalStore.initImpl(Lucene4ExternalStore.java:718)
... 60 common frames omitted