我正在尝试使用Java进行一些测试。我有两个目录root
和root/lib
。我有一个root/lib/Test.java
文件和一个root/Foo.java
文件。我可以使用javac lib/Test.java
和javac -classpath lib Foo.java
进行编译,然后获取:
root/
Foo.java
Foo.class
lib/
Test.java
Test.class
这是他们的样子:
class Foo {
static public void main(String[] argv) {
System.out.println(Test.test());
}
}
和
class Test {
public static int test() {
return 2;
}
}
如何运行它们以便它们一起工作而不添加import语句?我试过java -classpath ".;lib" Foo
,但我得到java.lang.NoClassDefFoundError: Foo
Lala: jeena$ cd root
Lala:root jeena$ java -classpath ".;lib" Foo
Exception in thread "main" java.lang.NoClassDefFoundError: Foo
Caused by: java.lang.ClassNotFoundException: Foo
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
答案 0 :(得分:7)
这表明你是root的父母:
javac -classpath root / lib Foo.java
这表明你是在根:
java -classpath“.; lib”Foo
您实际从哪个目录工作?也许绝对路径对你来说更容易?
另外,什么操作系统?例如,在Linux上,您的路径分隔符将为:
而不是;
。
答案 1 :(得分:1)
我不确定实际问题是什么 - 如果你在Windows上,并且两个类都没有使用特定的包名(即,它们在未命名的包中,你不应该使用),然后“ java -classpath .; lib Foo“应该能够毫无问题地加载和运行Foo。
如果它们不在同一个包中(你没有显示),那么只要Test是公共的,你可以使用“packageName.goes.here.Test.test()访问test()方法”。 。“