0

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

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

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

org.apache.solr.common.SolrException:无法在 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) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at 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 at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:322) at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:287) at 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:无法创建核心:在 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) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at 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:无法在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:592) 的 org.apache.solr.core.CoreContainer 加载 solrconfig.xml 的配置.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 at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:322) at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:287) at 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 轻松部署它?

4

1 回答 1

0

回答我自己的问题!:)

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

  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)

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

于 2013-09-25T15:50:04.937 回答