【问题标题】:Solrj NoClassDefFoundErrorSolrj NoClassDefFoundError
【发布时间】:2015-10-03 01:20:48
【问题描述】:

我正在使用 Solr 对数据库执行搜索。我在 pom.xml 中添加了以下依赖项,但它不起作用。

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>5.3.1</version>
</dependency>

我收到运行时错误 java.lang.NoClassDefFoundError: org/apache/solr/common/params/SolrParams

我通过将整个库放在 WEB-INF/lib 文件夹下解决了这个问题。然而,这让我感到困惑,为什么 Maven 依赖项不起作用。 我正在使用 tomcat 8.0。

【问题讨论】:

  • 尝试清理 Tomcat 临时文件夹和 war 并使用 mvn clean install 从头开始​​重建。
  • pom 中的&lt;packaging&gt; 标签的价值是什么?您没有在solr-solrj &lt;dependency&gt; 中包含&lt;scope&gt; 标记,因此应用了默认的scope (compile)。这意味着在构建期间和运行时都需要相关的工件(通常是 JAR 文件),因此该工件应该已包含在您的部署包中。 NoClassFoundError 表示相关工件在运行时不存在,这就是为什么将库放在 WEB-INF/lib 中解决问题的原因。根本问题可能在您的pom 中。可以添加完整的内容吗?
  • 那么我应该如何处理 标签?

标签: java maven tomcat solr


【解决方案1】:

应用程序中引用的所有 jars(库)在运行时都应该在应用程序的库路径中可用。在您的 POM 中,您已经定义了您正在使用的所有库或包。 POM 的默认存储库是 ~/.m2/respository,它保存所有引用 jar。

现在您还需要在朗姆酒时间提供它们。当您对任何应用程序执行mvn clean install 时,默认情况下它只打包应用程序源代码而不是所有库。这些被称为Thin jar's,因为它们只包含应用程序代码和轻量级。

要在运行时访问它们,您需要创建一个Fat jar,它将捆绑您的 POM 文件中定义的所有 jar,或者您需要将它们添加到应用程序 lib 路径中。

通过将它们放入WEB-INF/lib,您将所有 jar 添加到应用程序库路径中,这是 tomcat 的默认库路径。

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多