所以我编写了一个名为Item
的类,并使用Junit写了一个名为ItemTest
的测试,我想从命令行执行我的测试。这是我遵循的步骤:
设置路径,运行java.exe并将类路径设置为库
...> set path="C:\Program Files (x86)\Java\jdk1.7.0_40\bin"
...> set classpath=C:\Program Files (x86)\Java\hamcrest-core-1.3.jar; C:\Program Files (x86)\Java\junit-4.11.jar
然后我只需运行org.junit.runner.JUnitCore来查看添加的库是否在类路径中
...>java org.junit.runner.JUnitCore
输出
JUnit version 4.11
Time: 0,001
OK (0 tests)
然后我编译时没有错误Item
和ItemTest
C:\Users\User\IdeaProjects\My_project\src>javac .\main\java\Item.java .\test\java\ItemTest.java
然后尝试运行此类
C:\Users\User\IdeaProjects\My_project\src>java org.junit.runner.JUnitCore main.java.Item test.java.ItemTest
最后我得到了这个
JUnit version 4.11
Exception in thread "main" java.lang.NoClassDefFoundError: main/java/Item (wrong name: Item)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 2)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:86)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
如何解决这个问题?我应该将Item
放在classpath中吗?
UPD#1
将此路径放在我的类路径中不起作用(使用和不使用src
):
C:\Users\User\IdeaProjects\My_project\src>
UPD#2
当我想要运行课程时,我会在他存储在文件系统或他所放置的包中时对他进行调查?因为我没有包,所以My_project
除了项目名称之外还有一个模块名称。
解决
这是方法 - 我添加到classpath下一个路径:
课程Item
的路径:
C:\Users\User\IdeaProjects\My_project\src\main\java\;
测试课程ItemTest
的路径:
C:\Users\User\IdeaProjects\My_project\src\test\java\;
然后只需运行:
...>java org.junit.runner.JUnitCore ItemTest
答案 0 :(得分:3)
您必须将.class文件的位置放在类路径中。即使你在同一个文件夹中,如果它们不在类路径中也不会找到它们。那来自DOS x ....其他任何人。
在DOS中,操作系统首先在当前文件夹中查找。操作系统在其他任何地方首先查找路径(或Java的类路径)。
如果Item在com.example.Item包中,并且该类位于c:\ users \ test \ myproj \ target \ com \ example \ Item.class中,则必须添加c:\ users \ test \ myproj \ target \到classpath