サードパーティライブラリの場所により、solrクラウドを開始したときのエラーエラー

StackOverflow https://stackoverflow.com/questions/5874917

質問

私はSolr 3.1に移行しようとしました。私のプロジェクトはDataImport Handlerを使用しています。Solrを始めたとき、Solrcoreawarを尋ねました。あなたがあなたに感謝することができるなら、私はこの問題を解決する必要があります

次のメッセージは、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)
役に立ちましたか?

解決

問題は解決されました。

この問題は、DataImporthandlerとRequestHandlerが2つの異なるクラスローダーによってロードされているために発生しました。それを解決するには、solrが同じクラスローダーからのみ瓶をロードするようにします。

まず第一に、私はそれを保証しました:

1)solrconfig.xmlで削除DataImporthandlerが1つの場所からのみ来ることを確認してください2)すべてのディレクティブにコメントし、LIBディレクトリのLIBディレクトリを参照する新しいディレクティブを追加しました。 example/solr/lib 、このディレクトリはデフォルトでは存在しません。それを作成します(たとえば、使用します mkdir solr/lib)およびLIB指令の solrconfig.xml なります

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

3)jarファイルをdistディレクトリからこのディレクトリの例/solr/libに追加します
4)SOLRサーバーを起動します

そして、この目的のためにDataImporthandlerを使用する場合、MySQL-Driver JARをインクルードパスにコピーすることを忘れないでください。

注:これはsolr 4.0で機能します

他のヒント

問題はおそらくより深いですが、クラスパスにSLF4J APIを入れてみることができます。 (http://www.slf4j.org/download.html)。

@見る 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>

数ヶ月後、あなたは応答を得るかもしれません。

まったく同じ問題があり、実際にデータインポートハンドラーに絶対パスを使用することでそれを乗り越えることができました。

#SOLR 3.5:ClassLoaderの問題は上記で正しく特定されていますが、ソリューションは私にとってはうまくいかなかったようです。 DataImporthandlerの瓶をSolr.Warファイルに入れただけで、もちろん機能しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top