2013-05-30 55 views
1

我使用Eclipse创建了一个Junit测试用例,它工作正常。我正在尝试使用命令行编译它,但似乎无法做到这一点。在Windows 8命令行上编译Junit错误

我能“编译”现在fine..but当我尝试运行它,我得到以下错误:

JUnit version 4.8.2 
Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/SelfDesc 
ribing 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$100(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at org.junit.runner.Computer.getSuite(Computer.java:26) 
     at org.junit.runner.Request.classes(Request.java:69) 
     at org.junit.runner.JUnitCore.run(JUnitCore.java:117) 
     at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98) 
     at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53) 
     at org.junit.runner.JUnitCore.main(JUnitCore.java:45) 
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 18 more 

要运行它,我使用:

java -cp "E:/Android ADT/adt-bundle-windows-x86_64-20130219/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar;." org.junit.runner.JUnitCore SchedulerTest 

汇编工作正常,编译我用:

javac -cp "E:/Android ADT/adt-bundle-windows 
-x86_64-20130219/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar 
;." SchedulerTest.java 
+0

您是否使用'junit.jar'内的hamcrest或者是否有单独的依赖项? – janos

+0

不要相信。我输入的唯一东西是: 'import static org.junit.Assert。*; import org.junit.Test;' – user1411893

回答

0

飞奔时,当编译工作正常,但你得到java.lang.NoClassDefFoundError g代码,通常表示缺少运行时依赖关系。在这种情况下,编译时不使用org.hamcrest.SelfDescribing,但在运行时需要。

hamcrest通常与官方junit.jar捆绑在一起,您可以从junit.org下载,但您的E:/Android ADT/adt-bundle-windows-x86_64-20130219/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar没有。在Android ADT插件目录E:/Android ADT/adt-bundle-windows-x86_64-20130219/eclipse/plugins/中查找hamcrest jar,并在运行应用程序时将其包含在类路径中。

也就是说,像这样运行:

java -cp "E:/Android ADT/adt-bundle-windows-x86_64-20130219/eclipse/plugins/PATH_TO_HAMCREST.jar;E:/Android ADT/adt-bundle-windows-x86_64-20130219/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar;." org.junit.runner.JUnitCore SchedulerTest 

最后,单元测试工作正常,在Eclipse中,因为有hamcrest是当你运行单元测试的默认类路径的一部分。