类路径问题

时间:2014-07-03 18:15:55

标签: java classpath

我有这个目录结构(在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

你能帮我理解我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您尝试运行的类及其依赖关系位于两个不同的类路径上。 Test类植根于bin内,而ConditionalCompilation类根植于父目录​​中。

一个修复是明确指定依赖类路径。

java -classpath bin;. ConditionalCompilation

另一个解决方法是编译并运行bin目录。

javac -d .\bin -classpath .\bin ConditionalCompilation.java
cd bin
java ConditionalCompilation