謝謝darkk6的解答
當我把 Lib資料夾打包起來的jar檔就可以直接執行
但我做了另一個測試,我想做另一個UseJar的class去使用TestJar的function
所以我把test.jar放到
D:\java\workspace\testProject\Lib\show\test.jar
[UseJar.java]
D:\java\workspace\testProject\UseJar.java
/*=============================================*/
import Lib.show.TestJar;
class UseJar{
public static void main(String[] args) {
TestJar objHiJava = new TestJar();
objHiJava.hiJava("UseJar");
}
}
/*==============================================*/
[編譯指令]
D:\java\workspace\testProject>
javac -cp D:\java\workspace\testProject\Lib\show\test.jar UseJar.java
產生UseJar.class
[執行指令]
D:\java\workspace\testProject>
Case1)
java UseJar
出現錯誤
Exception in thread "main" java.lang.NoClassDefFoundError: Lib/show/TestJar
at UseJar.main(UseJar.java:4)
Caused by: java.lang.ClassNotFoundException: Lib.show.TestJar
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
我想應該是沒有指定classpath,所以我試了另一個方法
Case2)
java -cp D:\java\workspace\testProject\Lib\show\test.jar UseJar
出現錯誤(錯誤: 找不到或無法載入主要類別 UseJar)
還是不行,但不知道為什麼這樣指定jar檔不行,又找了資料,試了第三種方法
Case3)
java -cp .;Lib\show\test.jar UseJar
居然可以執行正確結果
我不懂我已經指定絕對路徑的Jar檔(case2),為何不行
case3多了一個'.'當前目錄的指定,就可以執行
環境變數的CLASSPATH=".;D:\java\workspace\testProject\"
誤打誤撞雖然結果正確,但卻不知所以然
麻煩各位糾正我錯誤的觀念,謝謝