即使Jar中包含CommonTermsQuery,我也收到NoClassDefFoundError,我可以在构建路径中看到它。可能是什么问题?

时间:2019-04-13 05:16:35

标签: java lucene lucene-highlighter

我正在将Lucene从版本2迁移到7.7.1,并在升级Lucene搜索时面临以下问题。 即使包含了它所属的jar,也可以获取CommonTermsQuery的NoClassDefFoundError(lucene-queries-7.7.1.jar)。您能建议这里缺少什么吗?

错误日志:

_Apr 12, 2019 5:07:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path threw 
exception [javax.servlet.ServletException: java.lang.NoClassDefFoundError:  
       org/apache/lucene/queries/CommonTermsQuery] with root cause
java.lang.NoClassDefFoundError: org/apache/lucene/queries/CommonTermsQuery
at     org.apache.lucene.search.highlight.WeightedSpanTermExtractor.extract(WeightedSpanTermExtractor.java:149)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.extract(WeightedSpanTermExtractor.java:112)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.getWeightedSpanTerms(WeightedSpanTermExtractor.java:513)
at org.apache.lucene.search.highlight.QueryScorer.initExtractor(QueryScorer.java:218)
at org.apache.lucene.search.highlight.QueryScorer.init(QueryScorer.java:186)
at org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:201)
at org.apache.lucene.search.highlight.Highlighter.getBestFragments(Highlighter.java:161)
at org.apache.lucene.search.highlight.Highlighter.getBestFragments(Highlighter.java:465)_

代码段:

...
TokenStream tokenStream = analyzer.tokenStream(searchField.toLowerCase(), new 
StringReader(content));
        preview = highlighter.getBestFragments(tokenStream, content, 3, "...");
...

2 个答案:

答案 0 :(得分:0)

您需要将lucene-queries-7.7.1.jar添加到您的类路径中。 (顺便说一句-已存在较新版本-8.0.0)

答案 1 :(得分:0)

Eclipse是指较旧的jar。我做了以下事情来解决我的问题。 如果您已将jar添加到构建路径中,并且在引用的库中可见,则可以。

  • 检查Eclipse缓存中是否存在jar:Workspace / .metadata / .plugins / org.eclipse.wst.server.core / tmp0 / wtpwebapps / project / WEB-INF / lib

  • 然后转到 右键单击项目>属性>部署程序集:检查您的jar,如果缺少,则添加它。

清理生成项目。很好。