Java 新手常被 classpath 困擾:開發環境能跑、部署卻失敗,或反之。本文徹底解析 classpath 運作原理,看懂後包你無憂。作者:丑丑牛。
執行 java com.shinechina.MyClass 時,JVM 依 classpath 順序尋找。假設有兩個版本的 MyClass 分別在 c:\mylib 與 d:\mylib,classpath 為 c:\mylib;d:\mylib;d:\jdk1.2.2\lib\rt.jar,JVM 會先在 c:\mylib 找到 com\shinechina\MyClass.class 並執行版本 1,忽略版本 2。若 classpath 反過來,則執行版本 2。
指定 classpath 執行特定版本:
java -classpath d:\mylib;%classpath% com.shinechina.MyClass
IDE(JBuilder、JDeveloper、VisualAge)皆有專屬 classpath 設定,不讀取系統變數,這就是「外面能跑、IDE 跑不了」的主因。設定方式:
Project → Project Properties → Paths → Add 加入庫或目錄。純 JDK 開發者需自行設定系統 CLASSPATH 或編譯執行時用 -classpath 參數。
類別檔位於 c:\mylib\com\shinechina\MyClass.class,正確 classpath 應為 c:\mylib(套件根目錄),而非 c:\mylib\com\shinechina 或 c:\mylib\com。JVM 會依套件結構從 classpath 根目錄往下遞歸尋找。
掌握 classpath 順序、套件根目錄概念、IDE 獨立設定機制,即能解決 90% 的類別找不到問題。建議參考《Java深度歷險》深入了解 ClassLoader 機制。