1

FinanceService特定のクラス ( ) を jar からインポートできません。inner-class を含め、他のすべては正常に動作しFinanceService$Versionsます。例外が発生しましNoClassDefFoundた。どうすればよいかわかりません。

ソースが正常にコンパイルされたときに、ここで見つけた答えを言い換えると、この例外が発生しますが、実行時に必要なクラス ファイルが見つかりませんでしたが、最初の要素が次の .jar 内にあることがはっきりとわかります。

メタINF/
META-INF/MANIFEST.MF
com/
com/google/
com/google/gdata/
com/google/gdata/client/
com/google/gdata/client/finance/
com/google/gdata/data/
com/google/gdata/data/finance/
com/google/gdata/client/finance/FinanceService$Versions.class
com/google/gdata/client/finance/FinanceService.class
com/google/gdata/client/finance/FinanceUtilities.class
com/google/gdata/client/finance/PortfolioQuery.class

念のため、jar ファイルを再構築しましたが、同じエラーが発生しました。両方とも内部クラスを持ち、ロードに失敗している唯一のクラスであるため、それをロードする特別な方法があるに違いないという仮説を考えましたが、このコードはその反対を証明しています。どうすればいいですか?

ありがとう!

4

1 に答える 1

3

その jar には多くの依存関係があるようです。Clojure を起動するときに、それらすべてが CLASSPATH にあることを確認してください。また、バージョンが混在していないことを確認してください。そこにあるダウンロードリンクをスキップし、gdata-finance-2.0.jar代わりにリンクしたプロジェクトページからhttp://gdata-java-client.googlecode.com/files/gdata-src.java-1.26.0.java.zipをダウンロードしましたには大量の jar ファイルが付属しておりgdata/java/lib、そのうちの 1 つが財務 jar でした。だから私はすべてを解凍してこれをしました:

$ java -cp /path/to/clojure.jar:gdata/java/lib/* clojure.main
Clojure 1.2.0-master-SNAPSHOT
user=> (import '(com.google.gdata.client.finance FinanceService))
com.google.gdata.client.finance.FinanceService

これは明らかにうまくいきました。しかし、今FinanceService$Versionsは存在しません。どちらにも存在しませんFinanceService.java。おそらく、あなたが使用しているものとは異なるバージョンのライブラリだと思います。

を取得NoClassDefFoundしている場合は、検出されていないクラスに注意を払っていることを確認してください。 FinanceService欠落している可能性がありますが、依存関係の1つが欠落していると不平を言っている可能性もあります。

于 2010-02-19T23:41:57.363 に答える