1

clojure-solr-0.2.0 を solr4 (trunk nightly build) で動作させようとしています。次の例外が発生します。

Caused by: java.lang.RuntimeException: Invalid version or the data in not in 'javabin' format
at org.apache.solr.common.util.JavaBinCodec.unmarshal(JavaBinCodec.java:99)
at org.apache.solr.client.solrj.impl.BinaryResponseParser.processResponse(BinaryResponseParser.java:39)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:466)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:243)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)

これは、clojure-solr が solr3 コードベースの solrj ライブラリのバージョンを使用しており、バージョン間で javabin 形式が変更されているためだと思います。

これを機能させる簡単な方法はありますか?

編集:

プロジェクトの lib フォルダーから solrj を削除し、lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar. 実行時に同じクラスがクラスパスで見つかる (はずである) ので、それがうまくいくことを望んでいました (推移的な依存関係は、依存lein deps関係を取得するために実行されたときにのみ必要なはずです (または私が推論した)。結果は、クラスが見つからない場所でした)ランタイム:

Caused by: java.lang.ClassNotFoundException:    org.apache.solr.client.solrj.impl.CommonsHttpSolrServer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at clojure_solr$eval1423$loading__4414__auto____1424.invoke(clojure_solr.clj:1)
at clojure_solr$eval1423.invoke(clojure_solr.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
... 95 more

そして問題はCommonsHttpSolrServer、jar に存在しなくなったことです。

$ jar tf lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar |grep Http
org/apache/solr/client/solrj/impl/HttpSolrServer$1.class
org/apache/solr/client/solrj/impl/HttpSolrServer$2.class
org/apache/solr/client/solrj/impl/HttpSolrServer$3.class
org/apache/solr/client/solrj/impl/HttpSolrServer$DeflateDecompressingEntity.class
org/apache/solr/client/solrj/impl/HttpSolrServer$GzipDecompressingEntity.class
org/apache/solr/client/solrj/impl/HttpSolrServer$UseCompressionRequestInterceptor.class
org/apache/solr/client/solrj/impl/HttpSolrServer$UseCompressionResponseInterceptor.class
org/apache/solr/client/solrj/impl/HttpSolrServer.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$1.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$Req.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$Rsp.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$ServerWrapper.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer.class
$ jar tf lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar |grep CommonsHttp
$
4

1 に答える 1

1

clojure-solrの独自のビルドを作成し、最新のsolr4で動作するように修正する必要がある可能性が非常に高くなります。これは実際にはそれほど難しいことではありません。

  • githubプロジェクトからクローンを作成します
  • レインインストール
  • メインプロジェクトに依存関係として追加します
  • ハックして繰り返します。
于 2012-05-18T21:46:23.357 に答える