java - 通过 Maven 部署 Solr 到 Tomcat

标签 java maven tomcat solr intellij-idea

<分区>

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

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

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

org.apache.solr.common.SolrException: Could not load config for solrconfig.xml at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:592) at org.apache.solr.core.CoreContainer.create(CoreContainer.java:657) at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:364) at 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) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:680)

Caused by: 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) at org.apache.solr.core.Config.(Config.java:86) at org.apache.solr.core.SolrConfig.(SolrConfig.java:120) at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:589) ... 11 more

23Sep13-10:54:34 ERROR(SolrException.java:119)-null:org.apache.solr.common.SolrException: Unable to create core: collection1 at org.apache.solr.core.CoreContainer.recordAndThrow(CoreContainer.java:1150) at org.apache.solr.core.CoreContainer.create(CoreContainer.java:666) at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:364) at 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) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:680)

Caused by: org.apache.solr.common.SolrException: Could not load config for solrconfig.xml at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:592) at org.apache.solr.core.CoreContainer.create(CoreContainer.java:657) ... 10 more

Caused by: 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) at org.apache.solr.core.Config.(Config.java:86) at org.apache.solr.core.SolrConfig.(SolrConfig.java:120) at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:589) ... 11 more

我的 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 轻松部署它?

最佳答案

回答我自己的问题! :)

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

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

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

关于java - 通过 Maven 部署 Solr 到 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963106/

相关文章:

maven - 使用 tomcat-maven-plugin 将单个 war 部署到多个 tomcat

java - 避免运行两个应用程序的 tomcat 崩溃

java - 按住按钮操作方法

java - 无需 PrintWriter 的 Ajax 和 Struts 1.x 集成

java - 如何打包分离 Web 服务和 HTML/JS 的 Web 应用程序

Tomcat 6 无法访问应用程序

java - 从pdf中检索数据的特定部分

java - CPU 未列为使用 Windows 的设备

如果在配置文件中使用,Maven 导入的依赖项不会得到解析

java - Maven `mvn -PautoInstallPackage clean install` 从 VM guest 到主机失败