我无法从jar中导入特定的类(FinanceService
)。所有其他人都可以正常工作,包括内级FinanceService$Versions
。我收到NoClassDefFound
例外,我不知道该怎么办。
这个异常发生了,解释了我在这里找到的答案,当源代码成功编译时,但是在运行时,找不到所需的类文件,但我可以清楚地看到它在里面.jar,其第一个元素是:
META-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
为了确定,我重建了罐子,但仍然遇到了同样的错误。因为它是唯一一个都具有内部类并且无法加载的类,所以我认为必须有一种特殊的加载方式,但this code证明了相反的假设。知道该怎么办吗?
谢谢!
答案 0 :(得分:3)
那个jar显然有很多依赖,确保你在启动Clojure时将所有这些依赖于CLASSPATH。还要确保你没有混合版本。我跳过了你所在的gdata-finance-2.0.jar
的下载链接,而是从你链接的项目页面下载http://gdata-java-client.googlecode.com/files/gdata-src.java-1.26.0.java.zip,其中包含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
可能会丢失,但也可能抱怨其中一个依赖项缺失。