如何修复java RuntimeException:在类路径中找不到资源“solrconfig.xml”? [英] How to fix java RuntimeException: Can't find resource 'solrconfig.xml' in classpath?

查看:1389
本文介绍了如何修复java RuntimeException:在类路径中找不到资源“solrconfig.xml”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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


在类路径或'/ home / sampleuser / public_html中找不到资源'solrconfig.xml' 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 as:

     <?xml version =1.0encoding =utf-8?> 
    < Context docBase =/ usr / local / jakarta / tomcat / webapps / solr.wardebug =0crossContext =true>
    < Environment name =solr / hometype =java.lang.String
    value =/ home / sampleuser / public_html / apache-solr / exampleoverride =true/> ;
    < / Context>


  5. 编辑tomcat启动脚本 etc / init.d (不知道是否必须这样做):


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



下面是catalina.err的完整错误日志:

  2011年10月9日下午7:35:06 org.apache .catalina.core.StandardService stop 
INFO:停止服务Catalina
2011年10月9日下午7:35:06 org.apache.catalina.core.ApplicationContext日志
INFO:SessionListener:contextDestroyed )
2011年10月9日下午7:35:06 org.apache.catalina.core.ApplicationContext日志
INFO:ContextListener:contextDestroyed()
2011年10月9日下午7:35:06 org.apache.catalina.core.ApplicationContext日志
INFO:SessionListener:contextDestroyed()
2011年10月9日下午7:35:06 org.apache.catalina.core.ApplicationContext日志
INFO :ContextListener:contextDestroyed()
2011年10月9日下午7:35:06 org.apache.coyote.http11.Http11BaseProtocol destroy
信息:停止Coyote HTTP / 1.1 http-8080
十月9,2011 7:35:21 PM org.apache.catalina.core.AprLifecycleListener init
INFO:在java.library.path中找不到基于APR的Apache Tomcat本机库,它允许在生产环境中实现最佳性能: / usr / local / jdk / jre / lib / amd64 / server:/ usr / local / jdk / jre / lib / amd64:/ usr / java / packages / lib / amd64: / usr / lib
2011年10月9日下午7:35:23 org.apache.coyote.http11.Http11BaseProtocol init
INFO:在http-8080
上初始化Coyote HTTP / 1.1 Oct 9, 2011 7:35:23下午org.apache.catalina.startup.Catalina加载
信息:初始化在2875 ms处理
2011年10月9日下午7:35:23 org.apache.catalina.core。标准服务启动
信息:启动服务Catalina
2011年10月9日下午7:35:23 org.apache.catalina.core.StandardEngine start
信息:启动Servlet引擎:Apache Tomcat / 5.5。 33
2011年10月9日下午7:35:23 org.apache.catalina.core.StandardHost start
信息:XML验证已禁用
2011年10月9日下午7:35:24组织。 apache.catalina.startup.HostConfig deployDescriptor
警告:已经指定了主机appBase中的docBase /usr/local/jakarta/tomcat/webapps/solr.war,将被忽略
2011年10月9日7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome
信息:使用JNDI solr.home:/ home / sampleuser / public_html / apache-solr / example / solr
2011年10月9日7:35:25 PM org.apache.solr.core.SolrResourceLoader< init>
信息:Solr home设置为'/ home / sampleuser / public_html / apache-solr / example / solr /'
2011年10月9日下午7:35:25 org.apache.solr.servlet.SolrDispatchFilter init
INFO:SolrDispatchFilter.init()
2011年10月9日下午7:35:25 org.apache.solr.core.SolrResourceLoader locateSolrHome
INFO:使用JNDI solr.home:/ home / sampleuser / public_html / apache-solr / example / solr
2011年10月9日下午7:35:25 org.apache.solr.core.CoreContainer $ Initializer初始化
信息:寻找solr.xml: /home/sampleuser/public_html/apache-solr/example/solr/solr.xml
2011年10月9日下午7:35:25 org.apache.solr.core.SolrResourceLoader locateSolrHome
信息:使用JNDI solr.home:/ home / sampleuser / public_html / apache-solr / example / solr
2011年10月9日下午7:35:25 org.apache.solr.core.CoreContainer< init>
信息:新的CoreContainer:solrHome = / home / sampleuser / public_html / apache-solr / example / solr / instance = 1537767228
2011年10月9日下午7:35:25 org.apache.solr.core .SolrResourceLoader< init>
信息:Solr home设置为'/ home / sampleuser / public_html / apache-solr / example / solr /'
2011年10月9日下午7:35:26 org.apache.solr.core.SolrResourceLoader < init>
信息:Solr home设置为'/home/sampleuser/public_html/apache-solr/example/solr/./'
2011年10月9日下午7:35:26 org.apache.solr.common .SolrException log
SEVERE:java.lang.RuntimeException:在类路径或'/home/sampleuser/public_html/apache-solr/example/solr/./conf/'中找不到资源solrconfig.xml 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)
在org.apache.solr.core.CoreContainer $ Initializer.initialize(CoreContainer.java:133)
在org.apache.solr.servlet。 SolrDispatchFilter.init(SolrDispatchFilter.java:94)
在org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
在org.apache.catalina.core.ApplicationFilterConfig.setFilterDef ApplicationFilterConfig.java:78)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext(ApplicationContext.java:78))
在org.apache.catalina.core.ApplicationFilterConfig。< .java:3666)
在org.apache.catalina.core.StandardContext.start(StandardContext.java:4258)
在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)
在org.apache.catalina.startup.HostConfig.start(HostConfig.java:1203)
在org.apache.catalina。 startup.HostConfig.lifecycleEvent(HostConfig.java:319)
在org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
在org.apache.catalina.core.ContainerBase。 start(ContainerBase.java:1022)
在org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
在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方法)
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
10月9,2011 7:35:26下午org.apache.solr.servlet.SolrDispatchFilter init
INFO:SolrDispatchFilter.init()done
2011年10月9日下午7:35:26组织。 apache.solr.servlet.SolrServlet init
信息:SolrServlet.init()
2011年10月9日下午7:35:26 org.apache.solr.core.SolrResourceLoader locateSolrHome
信息:使用JNDI solr.home:/ home / sampleuser / public_html / apache-solr / example / solr
2011年10月9日7:35:26下午org.apache.solr.servlet.SolrServlet init
信息:SolrServlet .init()done
2011年10月9日下午7:35:26 org.apache.solr.core.SolrResourceLoader locateSolrHome
信息:使用JNDI solr.home:/ home / sampleuser / public_html / apache- solr / example / solr
2011年10月9日下午7:35:26 org.apache.solr.servlet.SolrUpdateServlet init
信息:SolrUpdateServlet.init()done

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

解决方案

:您不需要#3 #4 除非你明确地定制solr.war。 #4和#5是两种不同的方式来做同样的事情 - 使用任何一个最方便的(JNDI vs系统属性)



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



第三:的问题是文件权限。



日志记录有点令人困惑,因为 SOLR-3264 ,但是似乎发生的是它找不到)你的/home/sampleuser/public_html/apache-solr/example/solr/solr.xml,所以它进入传统的单核模式,其中假设你想使用Solr Home目录作为instanceDir为(单个)Solr核心 - 所以它然后寻找/home/sampleuser/public_html/apache-solr/example/solr/solrconf.xml,如果它找不到(或读取)该文件放弃。 p>

这取决于你的主要关注是你实际上有一个solr.xml(指向备用instanceDirs)帽子,它没有找到,或者如果你实际上有一个solrconfig.xml文件查看这些文件(及其目录)的文件权限,并确保它们可以由tomcat服务器的有效用户读取。



(FWIW: Solr 3.6及更高版本将有更好地记录solr.xml未找到并使用旧版模式​​,并且我已打开 SOLR-3266 ,以在将来更好地记录/错误处理不可读文件)


I'm having issues setting up Solr as Tomcat service in CentOS. I’m using solr 3.3.0 which should be working with Tomcat 5.5 installed from cPanel. The error I was getting is:

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

I saw other people having similar issues. I googled and tried to apply all of the approaches. However nothing worked for me so far.

I did the following:

  1. Copied solr.war to tomcat/webapps
  2. Restarted Tomcat Service
  3. Edited /usr/local/jakarta/tomcat/webapps/solr/WEB-INF/web.xml as:

    <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. Created solr.xml in /usr/local/jakarta/tomcat/conf/Catalina/localhost as:

    <?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. Edited tomcat startup script at etc/init.d (not sure if I had to do it at all) with:

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

Below is the complete error log from 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 

When I copy the missing path via shell I was able to navigate just fine. Seem like Tomcat cannot locate the solrconfig.xml.

解决方案

First off: you don't need to #3 and #4 and 5. #3 isn't really recommended unless you are explicitly customizing the solr.war. #4 and #5 are two different ways to do the same thing - use whichever one is most convenient for you (JNDI vs system properties)

Second: please note that while #3 and #5 are consistent, in #4 you actually specify a different Solr home dir (the parent dir of what you really want)

Third: I think the crux of your problem is file permissions.

The logging is a bit confusing due to SOLR-3264 which causes "instanceDirs" for each core to be refered to erroneously as "Solr Home" but what seems to be happening is that it can't find (or read) your "/home/sampleuser/public_html/apache-solr/example/solr/solr.xml" so it's going into legacy "Single Core" mode where it assumes that you want to use your Solr Home dir as an instanceDir for a (single) Solr Core -- so it then looks for "/home/sampleuser/public_html/apache-solr/example/solr/solrconf.xml" and if it can't find (or read) that file it gives up.

So depending on whether your main concern is that you actually have a solr.xml (pointing to alternate instanceDirs) hat it's not finding, or if you actually have a solrconfig.xml file where it's looking, check the file permissions of those files (and their directories), and make sure they are readable by the effective user of your tomcat server.

(FWIW: Solr 3.6 and up will have better logging when solr.xml is not found and legacy mode is used, and I've opened SOLR-3266 to pursue better ways of logging/erroring on unreadable files in the future)

这篇关于如何修复java RuntimeException:在类路径中找不到资源“solrconfig.xml”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆