2011-04-25 52 views
5

我正在嘗試使用Java進行一些測試。我有兩個目錄rootroot/lib。我有一個root/lib/Test.java文件和一個root/Foo.java文件。我可以javac lib/Test.java編譯兩者結合,然後javac -classpath lib Foo.java,並得到:如何爲兩個目錄設置java -classpath?

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; 
    } 
} 

如何運行它們,所以它們一起工作無需添加導入語句?我曾嘗試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) 

回答

7

這表明你在根的父母是:

的javac -classpath根/ lib目錄Foo.java

這意味着你的根是:

的java -classpath 「LIB」 富

哪個目錄ectory你實際上是從哪裏工作的?也許絕對路徑對你更容易?

另外,什麼操作系統?例如,在Linux上,您的路徑分隔符將是:而不是;

+0

這是Linux和OS X我正在嘗試它。我其實是在根內,也許我應該稍微改寫一下這個問題。 – Jeena 2011-04-25 19:10:08

+0

呵呵!好吧,現在我明白了,我應該使用「:」而不是「;」非常感謝你! – Jeena 2011-04-25 19:15:00

1

我不知道實際的問題是什麼 - 如果你使用的是Windows,並且既不使用類使用特定的軟件包名稱(例如,他們在未命名的軟件包,您不應該使用它),那麼「java -classpath。; lib Foo」應該能夠加載並運行Foo,而不會出現問題。

如果它們不在同一個包中(你沒有顯示),那麼只要Test是公共的,你可以通過使用「packageName.goes.here.Test.test( )「。

+0

他們只是普通的java文件,沒有包,我試圖在Linux和OS X上執行'java -classpath「。; lib」Foo',並且都得到了NoClassDefFoundError。我在這裏上傳了帶有文件結構的文件:http://jeena.net/t/java-test.zip – Jeena 2011-04-25 19:05:48

+0

(當我在沒有引號的情況下使用它時; lib然後shell變得瘋狂,因爲它認爲lib是接下來的命令,它不是。) – Jeena 2011-04-25 19:07:22

+0

@Jeena您正在使用錯誤的路徑分隔符,正如我所解釋的。 – 2011-04-25 19:07:56