私はClojureを初めて使用し、パントマイムを使用してWebページからテキストを抽出しようとしているプロジェクトに取り組んでいます。Leiningen でプロジェクトを管理し、Eclipse/CCW を使用して編集しています。pantomime.extract/extract 関数を使用しようとすると、次のエラーが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.tika.parser.pkg.PackageParser, compiling:(/tmp/form-init7461469090551574085.clj:1:72)
at clojure.lang.Compiler.load(Compiler.java:7142)
at clojure.lang.Compiler.loadFile(Compiler.java:7086)
at clojure.main$load_script.invoke(main.clj:274)
at clojure.main$init_opt.invoke(main.clj:279)
at clojure.main$initialize.invoke(main.clj:307)
at clojure.main$null_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:420)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.tika.parser.pkg.PackageParser
at org.apache.tika.parser.pkg.ZipContainerDetector.detect(ZipContainerDetector.java:86)
at org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:61)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:113)
at pantomime.extract$eval1104$fn__1105.invoke(extract.clj:29)
at pantomime.extract$eval1087$fn__1088$G__1078__1093.invoke(extract.clj:18)
at pantomime.extract$eval1116$fn__1117.invoke(extract.clj:53)
at pantomime.extract$eval1087$fn__1088$G__1078__1093.invoke(extract.clj:18)
at com.scrape$extract_text.invoke(scrape.clj:26)
at com.scrape$get_words.invoke(scrape.clj:29)
at com.sis$main.invoke(sis.clj:6)
at clojure.lang.Var.invoke(Var.java:375)
at user$eval5.invoke(form-init7461469090551574085.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6703)
at clojure.lang.Compiler.eval(Compiler.java:6693)
at clojure.lang.Compiler.load(Compiler.java:7130)
... 11 more
ABRT problem creation: 'success'
project.clj に適切な依存関係の行を含めるようにしました。
[com.novemberain/pantomime "2.6.0"]
また、名前空間に pantomime.extract 名前空間が必要であることも確認しました。
(ns com.scrape
(:require [pantomime.extract :as extract]))
「抽出」を呼び出す関数は次のとおりです。
(defn extract-text [url]
(:text (extract/parse (java.net.URL. url))))
「lein clean」と「lein deps」を実行してみました。また、leiningen が依存関係を格納するディレクトリ (~/.m2) を削除し、lein が適切なすべての jar ファイルを自動的に再ダウンロードできるようにしました。それでも、「lein run」を使用してコマンドラインから REPL を実行している場合でも、Eclipse から REPL を実行している場合でも、常に上記のエラーが発生します。
なぜこのエラーが発生するのですか?どうすれば修正できますか?
アップデート
ここに完全なソースを投稿するために、できるだけ少ないコードで新しいプロジェクトでこの問題を再現しようとしました。しかし、新しい lein プロジェクトでは、元のプロジェクトからすべてのコードをコピーできました。エラーが発生しなくなりました。
何が起こったのでしょうか?ライニンゲンの不具合?