【问题标题】:Deploy Solr to Tomcat via Maven [duplicate]通过 Maven 将 Solr 部署到 Tomcat [重复]
【发布时间】:2013-09-23 15:25:49
【问题描述】:

我在我的项目中广泛使用 Solr 来处理搜索,我想在 IntelliJ IDEA 中创建一个子模块,我可以将其作为 WAR 包独立部署或通过 IntelliJ 与其他具有预定义配置的工件一起启动。

我正在使用this tutorial 让我开始使用 Solr 和 Maven。我所做的唯一更改是删除了 Jetty 插件(因为我正在部署到 Tomcat)。

构建 WAR 文件按预期工作,但是使用 IntelliJ 启动或自己将其部署到 Tomcat 会返回此堆栈跟踪:

org.apache.solr.common.SolrException:无法加载 solrconfig.xml 的配置 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:592) 在 org.apache.solr.core.CoreContainer.create(CoreContainer.java:657) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:364) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:356) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 在 java.lang.Thread.run(Thread.java:680)

原因:java.io.IOException: Can't find resource 'solrconfig.xml' in classpath or 'solr/collection1/conf/', cwd=/usr/local/Cellar/tomcat/7.0.42/libexec /bin 在 org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:322) 在 org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:287) 在 org.apache.solr.core.Config.(Config.java:116) 在 org.apache.solr.core.Config.(Config.java:86) 在 org.apache.solr.core.SolrConfig.(SolrConfig.java:120) 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:589) ... 11 更多

23Sep13-10:54:34 错误(SolrException.java:119)-null:org.apache.solr.common.SolrException:无法创建核心:collection1 在 org.apache.solr.core.CoreContainer.recordAndThrow(CoreContainer.java:1150) 在 org.apache.solr.core.CoreContainer.create(CoreContainer.java:666) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:364) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:356) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 在 java.lang.Thread.run(Thread.java:680)

原因:org.apache.solr.common.SolrException:无法加载 solrconfig.xml 的配置 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:592) 在 org.apache.solr.core.CoreContainer.create(CoreContainer.java:657) ... 10 更多

原因:java.io.IOException: Can't find resource 'solrconfig.xml' in classpath or 'solr/collection1/conf/', cwd=/usr/local/Cellar/tomcat/7.0.42/libexec /bin 在 org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:322) 在 org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:287) 在 org.apache.solr.core.Config.(Config.java:116) 在 org.apache.solr.core.Config.(Config.java:86) 在 org.apache.solr.core.SolrConfig.(SolrConfig.java:120) 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:589) ... 11 更多

我的 solr.xml 看起来像这样:

<solr persistent="true">
  <logging enabled="true">
    <watcher size="100" threshold="INFO" />
  </logging>
  <cores adminPath="/admin/cores" defaultCoreName="${solr.default.core.name}" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}">
    <core name="${solr.default.core.name}" instanceDir="${solr.default.core.directory}" />
  </cores>
</solr>

我有一个 config.properties 文件(如教程中所述),如下所示:

#SOLR PROPERTIES
#Configures the directory used to store the data and configuration of the Solr default core
solr.default.core.directory=todo
#Configures the name of the Solr default core.
solr.default.core.name=todo

#SYSTEM PROPERTIES
#Configures the home directory of Solr
solr.solr.home=target/solr-home/

如何通过 Tomcat 轻松部署它?

【问题讨论】:

    标签: java maven tomcat solr intellij-idea


    【解决方案1】:

    回答我自己的问题! :)

    基本上,为了实现我的目标,我需要执行以下操作:

    1. 在我的 Maven POM 文件中包含 Solr WAR 作为依赖项
    2. 将默认的 Solr 核心和配置 (example/collection1/) 提取到我的项目的子目录中(我使用了 cores/collection1
    3. 在启动时添加一个 Java VM 参数 -Dsolr.solr.home 以指向核心目录 (-Dsolr.solr.home=/path/to/my/project/cores)

    它不是完全独立的(我仍然需要指向一个配置),但它似乎确实有效。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多