Re: [問題] command Line 打包jar檔與執行

看板java作者 (JGC)時間10年前 (2014/12/11 12:09), 10年前編輯推噓0(005)
留言5則, 2人參與, 最新討論串3/3 (看更多)
謝謝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\" 誤打誤撞雖然結果正確,但卻不知所以然 麻煩各位糾正我錯誤的觀念,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.0.99 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1418270968.A.54A.html ※ 編輯: JGC18 (39.10.0.99), 12/11/2014 12:11:39 ※ 編輯: JGC18 (39.10.0.99), 12/11/2014 12:12:28

12/11 13:06, , 1F
都是classpath 的問題 . case1:漏了所有的classpath
12/11 13:06, 1F

12/11 13:07, , 2F
case 2: 漏了 UseJar 這個class 的classpath
12/11 13:07, 2F

12/11 13:07, , 3F
case3: classpath OK!
12/11 13:07, 3F

12/11 13:08, , 4F
case 3 的那個 "." 就是 UseJar 這個class 的classpath
12/11 13:08, 4F

12/11 17:39, , 5F
原來如此,我懂了,非常感謝
12/11 17:39, 5F
文章代碼(AID): #1KYHZuLA (java)
文章代碼(AID): #1KYHZuLA (java)