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

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

问题描述

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

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:

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

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.

我做了以下事情:

  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>

  • /usr/local/jakarta/tomcat/conf/Catalina/localhost 中创建 solr.xml 为:

    <?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>
    

  • etc/init.d 处编辑了 tomcat 启动脚本(不确定我是否必须这样做):

  • 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"

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

    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 
    

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

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

    推荐答案

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

    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)

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

    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.

    由于 SOLR-3264,日志记录有点混乱 这会导致每个核心的instanceDirs"被错误地称为Solr Home",但似乎正在发生的事情是它无法找到(或读取)您的/home/sampleuser/public_html/apache-solr/example/solr/solr.xml",因此它会进入传统的单核"模式,在这种模式下,它假定您希望将 Solr Home 目录用作(单个)Solr 核心的 instanceDir——因此它会查找"/home/sampleuser/public_html/apache-solr/example/solr/solrconf.xml",如果找不到(或读取)该文件,则放弃.

    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.

    因此,取决于您主要关心的是您实际上是否有一个未找到的 solr.xml(指向备用 instanceDirs)帽子,或者如果您实际上有一个正在查找的 solrconfig.xml 文件,请检查这些文件的权限文件(及其目录),并确保它们可以被您的 Tomcat 服务器的有效用户读取.

    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 及更高版本将具有 未找到 solr.xml 并使用传统模式时更好的日志记录,并且我已经打开 SOLR-3266 以寻求更好的方法在未来对不可读的文件进行记录/错误)

    (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天全站免登陆