如何为两个目录设置java -classpath?

时间:2011-04-25 18:57:30

标签: java jvm

我正在尝试使用Java进行一些测试。我有两个目录rootroot/lib。我有一个root/lib/Test.java文件和一个root/Foo.java文件。我可以使用javac lib/Test.javajavac -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)

2 个答案:

答案 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()方法”。 。“