4

我尝试迁移到 Solr 3.1,我的项目使用 Dataimport 处理程序,当我启动 solr 时它问我 SolrCoreAwar 未找到我将以下文件复制到 lib 目录 apache-solr-dataimporthandler-3.1-SNAPSHOT.jar 但在说明时再次出现错误solr 我需要解决这个问题,如果你能帮忙谢谢

下一条消息是我在启动 Solr 3.1 时遇到的异常

 java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.LoggerFactory
    at org.apache.solr.handler.dataimport.DataImportHandler.<clinit>(DataImportHandler.java:72)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:373)
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:423)
    at org.apache.solr.core.SolrCore.createRequestHandler(SolrCore.java:459)
    at org.apache.solr.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.java:154)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:563)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:458)
    at org.apache.solr.core.CoreContainer.load(CoreContainer.java:316)
    at org.apache.solr.core.CoreContainer.load(CoreContainer.java:207)
    at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:130)
    at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:94)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:985)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.mortbay.start.Main.invokeMain(Main.java:194)
    at org.mortbay.start.Main.start(Main.java:534)
    at org.mortbay.start.Main.start(Main.java:441)
    at org.mortbay.start.Main.main(Main.java:119

更新

我已将以下 jar 文件添加到我的类路径中,之前的异常消失了,但是在启动 solr 服务器时出现了一个新的错误:

 Error Instantiating Request Handler, org.apache.solr.handler.dataimport.DataImportHandler is not a org.apache.solr.request.SolrRequestHandler
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:425)
    at org.apache.solr.core.SolrCore.createRequestHandler(SolrCore.java:459)
    at org.apache.solr.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.java:154)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:563)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:458)
    at org.apache.solr.core.CoreContainer.load(CoreContainer.java:316)
    at org.apache.solr.core.CoreContainer.load(CoreContainer.java:207)
    at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:130)
    at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:94)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:985)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.mortbay.start.Main.invokeMain(Main.java:194)
    at org.mortbay.start.Main.start(Main.java:534)
    at org.mortbay.start.Main.start(Main.java:441)
    at org.mortbay.start.Main.main(Main.java:119)
4

5 回答 5

11

现在问题已经解决了。

出现此问题是因为 dataimporthandler 和 requesthandler 由两个不同的类加载器加载。要解决这个问题,请确保 solr 仅从同一个类加载器加载其 jar。

首先,我确保:

1)在 solrconfig.xml 中删除确保 dataimporthandler 仅来自一个地方 2)我已经注​​释了所有指令并添加了新的指令,该指令引用了 solr 目录中的 lib 目录,因此 lib 目录路径为example/solr/lib,默认情况下该目录不存在。创建它(例如使用mkdir solr/lib)并且 lib 指令solrconfig.xml变为

<lib dir="./solr/lib"/>   

3) 将 dist 目录中的 jar 文件添加到这个目录 example/solr/lib
4) 启动你的 solr 服务器

如果您为此目的使用 dataimporthandler,请不要忘记将您的 mysql-driver jar 复制到您的包含路径,以便能够索引您的 mysql 数据库表

注意:这适用于 solr 4.0

于 2011-06-20T12:44:13.273 回答
0

几个月后,您可能会收到回复。

有完全相同的问题,我能够通过实际使用数据导入处理程序的绝对路径来克服它。

于 2012-01-17T13:49:59.207 回答
0

问题很可能更深,但您可以尝试将 slf4j apis 放在您的类路径中。(http://www.slf4j.org/download.html)。

于 2011-05-03T19:56:26.617 回答
0

#solr 3.5:类加载器问题已在上面正确识别,但该解决方案似乎对我不起作用。我只是将 dataimporthandler jar 放入 solr.war 文件中,这当然可以。

于 2012-02-13T21:47:55.153 回答
0

@see SOLR-2574获取解决方案和示例工作项目。它适用于 Solr 3.2,但也适用于 Sorl 3.1。

简而言之,添加对 slf4j-nop 的依赖。

   <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.6.1</version>
    </dependency>
于 2011-06-05T16:32:35.860 回答