我有这个目录结构(在Windows下): C:\ JavaProjects \ BIN \调试\
在JavaProjects中,我有这样的Test.java:
package debug;
public class Test{
public void debug(String arg){
System.out.println(arg);
}
}
它已经像这样编译了
javac -d bin Test.java
现在在调试目录中我有Test.class。
然后我创建另一个类(在JavaProjects中也是ConditionalCompilation.java):
import debug.*;
public class ConditionalCompilation{
public static void main(String[] args){
Test a = new Test();
a.debug("Test");
}
}
然后,在JavaProjects中我写这个:
C:\JavaProjects>javac -classpath .\bin ConditionalCompilation.java
没有错误发生。
现在我试试这个:
C:\JavaProjects>java ConditionalCompilation
得到这个:
Exception in thread "main" java.lang.NoClassDefFoundError: debug/Test
at ConditionalCompilation.main(ConditionalCompilation.java:5)
Caused by: java.lang.ClassNotFoundException: debug.Test
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)
... 1 more
你能帮我理解我做错了什么吗?
答案 0 :(得分:0)
您尝试运行的类及其依赖关系位于两个不同的类路径上。 Test
类植根于bin
内,而ConditionalCompilation
类根植于父目录中。
一个修复是明确指定依赖类路径。
java -classpath bin;. ConditionalCompilation
另一个解决方法是编译并运行bin
目录。
javac -d .\bin -classpath .\bin ConditionalCompilation.java
cd bin
java ConditionalCompilation