1

我无法FinanceService从 jar 中导入特定的类 ( )。其他所有工作都很好,包括 inner-class FinanceService$Versions。我遇到了一个NoClassDefFound例外,我不确定如何继续。

发生此异常,解释我在这里找到的答案,当源成功编译时,但在运行时,找不到所需的类文件,但我可以在 .jar 中清楚地看到它,其第一个元素是:

元信息/
元信息/清单.MF
com/
com/谷歌/
com/谷歌/gdata/
com/google/gdata/客户端/
com/google/gdata/客户端/财务/
com/google/gdata/数据/
com/google/gdata/数据/财务/
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

可以肯定的是,我重建了罐子,但仍然遇到同样的错误。由于它是唯一一个同时具有内部类并且无法加载的类,因此我考虑了必须有一种特殊的加载方式的假设,但这段代码证明了相反的情况。知道该怎么做吗?

谢谢!

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,其中一个是金融 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可能会丢失,但它也可能会抱怨其依赖项之一丢失。

于 2010-02-19T23:41:57.363 回答