Errore quando avvia Solr Cloud, a causa della posizione delle librerie di terze parti
Domanda
I tried to migrate to Solr 3.1 , my project uses Dataimport handler , when I started solr it asked me SolrCoreAwar not found I copied the following file to lib directory apache-solr-dataimporthandler-3.1-SNAPSHOT.jar but again an error appeared when stating solr ho bisogno di risolvere questo problema, se puoi aiutarti a ringraziarti
Il messaggio successivo è l'eccezione che ricevo all'avvio di 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
Aggiornare
Ho aggiunto i seguenti file JAR al mio percorso di classe, l'eccezione precedente è scomparsa, ma è apparso un nuovo errore quando si avvia Solr Server:
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)
Soluzione
Il problema è ora risolto.
Questo problema si è verificato perché DataIMPorthandler e RequestHandler sono caricati da due diversi caricatori di classe. Per risolverlo, assicurarsi che Solr carichi i suoi barattoli solo dallo stesso caricatore di classe.
Prima di tutto l'ho assicurato:
1) In SolrConfig.xml rimuovi assicurati che dataIMPorthandler provenga solo da un posto 2) ho commentato tutte le direttive e aggiunto una nuova che si riferisce alla directory LIB nella directory Solr in modo che il percorso della directory Lib sia example/solr/lib
, questa directory non esiste per impostazione predefinita. Crea (ad esempio usando mkdir solr/lib
) e la direttiva Lib in solrconfig.xml
diventa
<lib dir="./solr/lib"/>
3) Aggiungi il file jar dalla directory dist a questo esempio di directory/solr/lib
4) Accendi il tuo server Solr
E non dimenticare di copiare il tuo barattolo MySQL-driver sul percorso include per essere in grado di indicizzare le tabelle di database MySQL se si utilizza DataIMPorthandler a questo scopo
Nota: funziona per Solr 4.0
Altri suggerimenti
Il problema è molto probabilmente più profondo, ma potresti provare a mettere le API SLF4J nel tuo percorso di classe. (http://www.slf4j.org/download.html).
@vedere Solr-2574 Per una soluzione e un progetto di lavoro di esempio. È per Solr 3.2 ma funziona anche con Sorl 3.1.
In breve, aggiungi una dipendenza da SLF4J-NOP.
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.1</version>
</dependency>
Un paio di mesi dopo, potresti ottenere la risposta.
Avevo lo stesso identico problema e sono stato in grado di superarlo utilizzando effettivamente percorsi assoluti per il gestore delle importazioni di dati.
#solr 3.5: il problema del classloader è stato correttamente identificato sopra, ma la soluzione non sembrava funzionare per me. Ho appena messo i barattoli di dataIMPorthandler nel file Solr.War e ovviamente ha funzionato.