Ошибка при запуске облака Solr из-за расположения сторонних библиотек

Я попытался перейти на 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)

person Muhannad A.Alhariri    schedule 03.05.2011    source источник


Ответы (5)


Теперь проблема решена.

Эта проблема возникла из-за того, что dataimporthandler и requesthandler загружаются двумя разными загрузчиками классов. Чтобы решить эту проблему, убедитесь, что solr загружает свои jar-файлы только из того же загрузчика классов.

В первую очередь я убедился, что:

1) В solrconfig.xml удалить убедитесь, что dataimporthandler исходит только из одного места 2) Я прокомментировал все директивы и добавил новую, которая ссылается на каталог lib в каталоге solr, поэтому путь к каталогу lib равен example/solr/lib , этот каталог не существует по умолчанию . Создайте его (например, используя mkdir solr/lib), и директива lib в solrconfig.xml станет

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

3) Добавьте файл jar из каталога dist в этот каталог example/solr/lib
4) Запустите ваш сервер solr

И не забудьте скопировать jar-файл mysql-драйвера в ваш путь включения, чтобы иметь возможность индексировать таблицы базы данных mysql, если вы используете dataimporthandler для этой цели.

Примечание. Это работает для solr 4.0

person Muhannad A.Alhariri    schedule 20.06.2011
comment
Думаю, вы спасли мой рассудок. Спасибо, что нашли время опубликовать собственное решение. - person Arkh; 09.09.2011
comment
Матерь Божья. Это было. Мой пользовательский ResponseHandler будет загружаться только в том случае, если он НЕ находится в каталоге solr/lib/. Я просто поместил его в другое место и добавил для него новую директиву lib, и все работает. - person Brian Gordon; 19.03.2013
comment
Если я понял ваше решение: вы закомментировали все директивы lib в solrconfig.xml? И поставить только одну директиву lib для lib. Я так и сделал, и моя единственная директива: ‹lib dir=../../../lib regex=.*\.jar /› . Когда я пытаюсь вставить документ в solr, я получаю сообщение об ошибке «Ошибка создания экземпляра обработчика запросов». - person FrenkyB; 16.12.2013
comment
Добавление solr-solrj-5.5.0.jar в каталог lib работало для solr-5.5.0. - person prabhugs; 03.03.2016

Проблема, скорее всего, глубже, но вы можете попробовать поместить slf4j apis в свой путь к классам. (http://www.slf4j.org/download.html).

person uncaught_exceptions    schedule 03.05.2011
comment
Я устал от этого, но никакого эффекта - person Muhannad A.Alhariri; 23.05.2011

@см. 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>
person simpatico    schedule 05.06.2011

Через пару месяцев вы можете получить ответ.

Была точно такая же проблема, и я смог преодолеть ее, фактически используя абсолютные пути к обработчику импорта данных.

person mhitza    schedule 17.01.2012

#solr 3.5 : проблема с загрузчиком классов была правильно определена выше, но решение мне не помогло. Я просто поместил файлы jar dataimporthandler в файл solr.war, и это, конечно же, сработало.

person anchormath    schedule 13.02.2012