Java 類路徑
Java 類路徑告訴 java 解釋器和 javac 編譯器去哪里找它們要執(zhí)行或?qū)氲念?。類(您可能注意到的那?*.class 文件)可以存儲在目錄或 jar 文件中,或者存儲在兩者的組合中,但是只有在它們位于類路徑中的某個地方時,Java 編譯器或解釋器才可以找到它們。 在 Windows 中,類路徑中的多個項是用分號分隔( ;)的,而在 UNIX 中,這些項是用冒號分隔( :)的。在以下實例中,類路徑中包括兩個 Cloudscape jar 文件( cs.jar 和 cstools.jar ),以及一個存儲 *.class 文件的目錄位置( myDevDir ): Windows 類路徑: c:\Cloudscape_10.0\lib\cs.jar;c:\Cloudscape_10.0\lib\cstools.jar;c:\myPath\myDevDir UNIX 類路徑: /Cloudscape_10.0/lib/cs.jar:/Cloudscape_10.0/lib/cstools.jar:/myPath/myDevDir 本文中的其余實例使用的都是 Windows 語法,因此,如果您是在 UNIX 機器上,那么需要對語法進行相應的調(diào)整。 設置 Java 類路徑 有三種方式設置 Java 類路徑: 1.永久地,通過在系統(tǒng)級上設置 CLASSPATH 環(huán)境變量來實現(xiàn)。 使用控制面板的系統(tǒng)設置來添加名為 CLASSPATH 的新變量,從而永久性地設置 Windows 環(huán)境變量。 UNIX 用戶可以通過向 .profile 或 .cshrc 文件添加 CLASSPATH 變量來永久設置類路徑。 2.臨時地,通過在命令窗口或 shell 中設置 CLASSPATH 環(huán)境變量來實現(xiàn)。 在 Windows 命令窗口中臨時設置 CLASSPATH C:\>set CLASSPATH=%CLOUDSCAPE_INSTALL%\lib\cs.jar;.; 如果是臨時設置類路徑,那么每次打開新的命令窗口時,都需要再次設置它。 3.在運行時進行,每次啟動 Java 應用程序和 JVM,都要指定類路徑。 運行時使用 -cp 選項來指定類路徑,這里的運行時是指啟動應用程序和 JVM 時。 例如 C:\Cloudscape_10.0\demo\programs\simple>java -cp %CLOUDSCAPE_INSTALL%\lib\cs.jar; SimpleApp 檢測問題 常見類路徑錯誤 主要有兩種類型的類路徑問題。第一類問題發(fā)生在沒有從類路徑中找到您試圖使用的 Java 類時,此時,它拋出一個 java.lang.ClassNotFoundException 異常。第二類問題發(fā)生在找到了您正試圖使用的類,但沒有找到它所導入的某個類時。本例中,在編譯時顯示了所導入的類,但在運行時,所導入的類沒有包含在類路徑中。這將拋出一個 java.lang.NoClassDefFoundError 異常。還有另一種考慮 NoClassDefFoundError 的方式,也就是說,在編譯當前執(zhí)行的類時,所搜索的類定義是存在的,但在運行時卻再也無法找到該定義了 如何可以解決這類問題呢?首先,檢查類路徑,驗證庫是否真正位于您認為的地方。例如,在 Windows 中使用該命令來輸出類路徑: C:\my_dir>echo %CLASSPATH% c:\Cloudscape_10.0\lib\cs.jar;c:\Cloudscape_10.0\lib\cstools.jar 然后,在 CLASSPATH 變量中查看每個路徑,并用 dir (Windows)或 ls (UNIX)命令查看這些文件是否存在。 如果不知道類位于哪個 jar 文件中,可以用以下命令來檢查: jar -tvf cs.jar | more 該命令產(chǎn)生許多輸出。如果正使用 Linux 或 Unix,或者在 Windows 中使用 UNIX 使用程序,那么您可以用 grep 篩選您所查找的類。例如,以下命令將查找 com.ihost.cs.tools.sysinfo 類: C:\Cloudscape_10.0\lib>jar -tvf cs.jar | grep -i com.ihost.cs.tools.sysinfo |
|