我是一位正在编写代码的医药科学专业的学生,所以我很抱歉如果这个问题的答案已经逃脱了我。编译成功但得到了NoClassDefFound错误
我在NetBeans和Eclipse中编写了一些java源代码。代码在两个IDE中运行良好,但是当我将所有.java文件移动到UNIX环境时,我成功地编译了代码,但命令行告诉我它无法找到位于同一个jar中的类我编译了。我收到了编译警告,但我认为这不会影响代码的运行。我已经搜索和搜索,似乎无法找到答案。这是我的命令行代码(有我的节目名称等):
[[email protected]:~]$ cd chorus_jk
[[email protected]:~/chorus_jk]$ ls
Chorus_JK.java EntropyNormal_JK.java Main_JK.java
colt.jar EstimateParzen_JK.java RA_reformatted_forCHORUS_JK.txt
Combination_JK.java LIST_JK.java
[[email protected]:~/chorus_jk]$ javac -cp colt.jar ./*.java -Xlint:unchecked
.
. (I edited out the 100 warnings as they refer to unchecked items)
.
100 warnings
[[email protected]:~/chorus_jk]$ jar cfe ChorusJK_RA.jar Main_JK ./*.class
[[email protected]:~/chorus_jk]$ java -jar ChorusJK_RA.jar
89
317504
Exception in thread "main" java.lang.NoClassDefFoundError: cern/colt/matrix/DoubleMatrix2D
at Chorus_JK.init(Chorus_JK.java:24)
at Main_JK.main(Main_JK.java:23)
Caused by: java.lang.ClassNotFoundException: cern.colt.matrix.DoubleMatrix2D
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 2 more
的“89”和“317504”是针对在读文件汇总输出,所以它看起来编译为成功的;但是,当程序到达计算部分时,它会给出线程“main”java.lang.NoClassDefFoundError中的异常:cern/colt/matrix/DoubleMatrix2D错误。非常感谢您的帮助!
CHorusJK_RA.jar中存在路径cern/colt/matrix/DoubleMatrix2D吗? – roymustang86 2012-07-25 13:36:29
当我编译代码时,我将colt.jar包含在路径所在的库路径中。我的理解是,在编译时,ChorusJK_RA.jar应该包含所有必需的类。这是不正确的? – 2012-07-25 13:41:43
编号ChorusJK_RA.jar里面不会包含colt.jar。如果您打算扩展您的项目并从命令行构建它,请考虑使用Maven或Gradle作为构建工具来为您管理依赖关系。 – 2012-07-25 13:47:44