如何修复java RuntimeException:在类路径中找不到资源'solrconfig.xml'?

时间:2011-10-12 02:42:52

标签: solr centos tomcat5.5

我在CentOS中将Solr设置为Tomcat服务时遇到问题。我正在使用solr 3.3.0,它应该与从cPanel安装的Tomcat 5.5一起使用。我得到的错误是:

  

在类路径中找不到资源'solrconfig.xml'或'/home/sampleuser/public_html/apache-solr/example/solr/./conf/',cwd = / usr / local / jakarta / apache-tomcat -5.5.33 / bin

我看到其他人有类似的问题。我用Google搜索并尝试应用所有方法。但到目前为止,对我来说没什么用。

我做了以下事情:

  1. solr.war复制到tomcat/webapps
  2. 重新启动Tomcat服务
  3. 编辑/usr/local/jakarta/tomcat/webapps/solr/WEB-INF/web.xml为:

    <env-entry>
     <env-entry-name>solr/home</env-entry-name>
     <env-entry-value>/home/sampleuser/public_html/apache-solr/example/solr</env-entry-value>
     <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
    
  4. solr.xml中创建/usr/local/jakarta/tomcat/conf/Catalina/localhost为:

    <?xml version="1.0" encoding="utf-8"?> 
    <Context docBase="/usr/local/jakarta/tomcat/webapps/solr.war" debug="0" crossContext="true">
      <Environment name="solr/home" type="java.lang.String"    
           value="/home/sampleuser/public_html/apache-solr/example"override="true"/>
    </Context>
    
  5. etc/init.d编辑了tomcat启动脚本(不确定我是否必须这样做):

  6. export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/home/sampleuser/public_html/apache-solr/example/solr"

    以下是来自catalina.err的完整错误日志:

    Oct 9, 2011 7:35:06 PM org.apache.catalina.core.StandardService stop 
    INFO: Stopping service Catalina 
    Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
    INFO: SessionListener: contextDestroyed() 
    Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
    INFO: ContextListener: contextDestroyed() 
    Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
    INFO: SessionListener: contextDestroyed() 
    Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
    INFO: ContextListener: contextDestroyed() 
    Oct 9, 2011 7:35:06 PM org.apache.coyote.http11.Http11BaseProtocol destroy 
    INFO: Stopping Coyote HTTP/1.1 on http-8080 
    Oct 9, 2011 7:35:21 PM org.apache.catalina.core.AprLifecycleListener init 
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk/jre/lib/amd64/server:/usr/local/jdk/jre/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 
    Oct 9, 2011 7:35:23 PM org.apache.coyote.http11.Http11BaseProtocol init 
    INFO: Initializing Coyote HTTP/1.1 on http-8080 
    Oct 9, 2011 7:35:23 PM org.apache.catalina.startup.Catalina load 
    INFO: Initialization processed in 2875 ms 
    Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardService start 
    INFO: Starting service Catalina 
    Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardEngine start 
    INFO: Starting Servlet Engine: Apache Tomcat/5.5.33 
    Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardHost start 
    INFO: XML validation disabled 
    Oct 9, 2011 7:35:24 PM org.apache.catalina.startup.HostConfig deployDescriptor 
    WARNING: A docBase /usr/local/jakarta/tomcat/webapps/solr.war inside the host appBase has been specified, and will be ignored 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
    INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader <init>
    INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/' 
    Oct 9, 2011 7:35:25 PM org.apache.solr.servlet.SolrDispatchFilter init 
    INFO: SolrDispatchFilter.init() 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
    INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.CoreContainer$Initializer initialize 
    INFO: looking for solr.xml: /home/sampleuser/public_html/apache-solr/example/solr/solr.xml 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
    INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.CoreContainer <init>
    INFO: New CoreContainer: solrHome=/home/sampleuser/public_html/apache-solr/example/solr/ instance=1537767228 
    Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader <init>
    INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/' 
    Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader <init>
    INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/./' 
    Oct 9, 2011 7:35:26 PM org.apache.solr.common.SolrException log 
    SEVERE: java.lang.RuntimeException: Can't find resource 'solrconfig.xml' in classpath or '/home/sampleuser/public_html/apache-solr/example/solr/./conf/', cwd=/usr/local/jakarta/apache-tomcat-5.5.33/bin 
            at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:268) 
            at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:234) 
            at org.apache.solr.core.Config.<init>(Config.java:141) 
            at org.apache.solr.core.SolrConfig.<init>(SolrConfig.java:131) 
            at org.apache.solr.core.CoreContainer.create(CoreContainer.java:435) 
            at org.apache.solr.core.CoreContainer.load(CoreContainer.java:316) 
            at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:133) 
            at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:94) 
            at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221) 
            at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302) 
            at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78) 
            at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3666) 
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:4258) 
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
            at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:634) 
            at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:561) 
            at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:496) 
            at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1203) 
            at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:319) 
            at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
            at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
            at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
            at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
            at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
            at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
            at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
            at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
            at java.lang.reflect.Method.invoke(Method.java:597) 
            at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
            at java.lang.reflect.Method.invoke(Method.java:597) 
            at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:219) 
    
    Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrDispatchFilter init 
    INFO: user.dir=/usr/local/jakarta/apache-tomcat-5.5.33/bin 
    Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrDispatchFilter init 
    INFO: SolrDispatchFilter.init() done 
    Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrServlet init 
    INFO: SolrServlet.init() 
    Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
    INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
    Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrServlet init 
    INFO: SolrServlet.init() done 
    Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
    INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
    Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrUpdateServlet init 
    INFO: SolrUpdateServlet.init() done 
    

    当我通过shell复制丢失的路径时,我能够很好地导航。好像Tomcat找不到solrconfig.xml

1 个答案:

答案 0 :(得分:3)

首先关闭:您不需要#3 #4 5.#3除非您明确自定义solr.war,否则不建议使用。 #4和#5是做同样事情的两种不同方法 - 使用最方便的方法(JNDI与系统属性)

第二:请注意,虽然#3和#5是一致的,但在#4中你实际上指定了一个不同的Solr home目录(你真正想要的父目录)

第三:我认为问题的症结在于文件权限。

由于SOLR-3264导致每个核心的“instanceDirs”被错误地称为“Solr Home”,因此日志记录有点令人困惑,但似乎正在发生的事情是它无法找到(或读取) )你的“/home/sampleuser/public_html/apache-solr/example/solr/solr.xml”所以它将进入传统的“单核”模式,它假定你想要使用你的Solr Home目录作为instanceDir(单个)Solr Core - 然后它会查找“/home/sampleuser/public_html/apache-solr/example/solr/solrconf.xml”,如果它找不到(或读取)它放弃的文件。

因此,根据您的主要关注点是您实际上是否有一个solr.xml(指向备用instanceDirs),它找不到,或者如果您确实有一个solrconfig.xml文件,请查看这些文件的权限文件(及其目录),并确保它们可由tomcat服务器的有效用户读取。

(FWIW:Solr 3.6及以上将有better logging when solr.xml is not found and legacy mode is used,我已经打开SOLR-3266以便在将来更好地记录/错误记录不可读的文件。