classpath 詳解(轉)

BSDLite發表於2007-08-15
classpath 詳解(轉)[@more@]設定類路徑
結構
可透過對 JDK 工具使用 -classpath 選項(首選方法)或設定 CLASSPATH 環境變數來設定類路徑。
C:> jdkTool -classpath path1;path2...
C:> set CLASSPATH=path1;path2...
每個 path 以檔名或目錄結尾,該檔名或目錄取決於將類路徑設定成什麼:
對於包含 .class 檔案的 .zip 或 .jar 檔案,路徑以 .zip 或 .jar 檔名結尾。
對於未命名包中的 .class 檔案,路徑以包含 .class 檔案的目錄結尾。
對於已命名包中的 .class 檔案,路徑以包含“root”包(完整包名中的第一個包)的目錄結尾。
用分號來分隔多個專案。使用 set 命令時,需要省略等號兩邊的空格(=)。其中 jdkTool 可以為 java、javac、javadoc,等等。有關詳細列表,參見 JDK 開發工具。
說明
類路徑告訴 Java 應用程式去哪裡查詢第三方和自定義類 -- 即不是 Java 擴充套件或 Java 平臺一部分的類。在 JDK 1.2 中,JVM 和其他 JDK 工具透過依次搜尋平臺庫、庫擴充套件和類路徑來查詢類(有關搜尋策略的詳細資訊,參見如何查詢類)。
多數應用程式的類庫都會充分利用擴充套件機制。因此,只有想要載入某個類庫 (a) 未位於當前目錄或其分枝包中 且 (b) 未位於擴充套件機制所指定的位置時,才需設定類路徑。

如果使用者是從舊版本 JDK 升級而來,則啟動設定可能包括不再需要的 CLASSPATH 設定。這時應該刪除任何非應用程式特定的設定。有些使用 Java 虛擬機器的第三方應用程式可能修改 CLASSPATH 環境變數以包括它們使用的類庫。這種設定可以保留。

可透過在呼叫 JVM 或其他 JDK 工具時使用 Java 工具的 -classpath 選項改變類路徑(例如: java -classpath ...)。這是改變類路徑的首選方法。還可透過使用 CLASSPATH 環境變數改變類路徑。

注意:JDK 1.2 預設類路徑是當前目錄。設定 CLASSPATH 變數或使用 -classpath 命令列開關將覆蓋預設值,因而如果想要在搜尋路徑中包括當前目錄,則必須在新設定中包括“.”。
類可以儲存在目錄(資料夾)或歸檔檔案(例如 classes.zip 或 classes.jar)中。有關歸檔檔案的詳細資訊和類路徑的工作原理,參見本文件最後的理解類路徑和包名。

重要說明:JDK 舊版本在預設類路徑中還包括 /classes 項。該目錄僅供 JDK 使用,且不用於應用程式類。應用程式類應該放置在 JDK 外部的目錄。這樣,安裝新 JDK 時不必需要重新安裝應用程式庫。為了與舊版本的相容性,使用 /classes 目錄作為類庫的應用程式在當前版本中仍能執行,但不能保證在以後的版本中它們還能執行。
使用 Java 工具的 -classpath 選項
Java 工具 java、jdb、javac 和 javah 具有 -classpath 選項,在工具執行時它將取代預設類路徑或由 CLASSPATH 環境變數所指定的類路徑。這是改變類路徑設定的推薦方法,因為這樣每個應用程式可具有它所需的類路徑而又不會干擾其他應用程式。
執行時工具 java 和 jdb 還具有 -cp 選項。該選項是 -classpath 的縮寫。

對於非常特殊的情況,java 和 javac 都具有開關,使得可改變它們使用的路徑以查詢它們自己的類庫。但是,絕大多數使用者從來都不會用到這些開關。

使用 CLASSPATH 環境變數
如前一節中所述,一般使用者將想要使用 -classpath 命令列選項。本節將介紹如何設定 CLASSPATH 環境變數或清除以前安裝遺留下的設定。
設定 CLASSPATH
在 DOS 提示符下,可用 set 命令修改 CLASSPATH 環境變數。其格式為:
set CLASSPATH=path1;path2 ...
路徑應該以指定驅動器的字母開頭,例如 C:...。這樣,在偶然切換到不同驅動器時仍可找到類(例如,如果路徑項以 ... 開頭,並且當前位於驅動器 D: 上,則所需的類將在 D: 而不是 C: 驅動器上找)。
清除 CLASSPATH
如果 CLASSPATH 環境變數被設定成不正確的值,或啟動檔案或指令碼程式設定了不正確路徑,則可透過使用下列命令清除 CLASSPATH:
C:> set CLASSPATH=
該命令僅清除當前會話的 CLASSPATH。要確保在以後的會話中具有正確的 CLASSPATH 設定,則應該刪除或修改啟動設定。
更改啟動設定
如果在系統啟動時設定 CLASSPATH 變數,則查詢它的位置取決於所使用的作業系統:
作業系統 方法
Windows 98 和
Windows 95 檢查 autoexec.bat 檔案中的 set 命令。
Windows NT 啟動“控制皮膚”,選擇“系統”,單擊“環境”選項卡,並在“使用者變數”部分中,檢查 CLASSPATH 變數。

理解類路徑和包名
Java 類被組織成包,而這些包被對映到檔案系統中的目錄。但是與檔案系統不同的是,無論何時指定包名,都應指定完整包名 -- 永遠不要僅指定它的一部分。例如,java.awt.Button 的包名總是應指定為 java.awt。
例如,假定想要 Java 執行環境在包 utility.myapp 中查詢名為 Cool.class 的類。如果該目錄的路徑為 C:javaMyClassesutilitymyapp,則應該將類路徑設定成包含 C:javaMyClasses。

要執行該應用程式,可使用下述 JVM 命令:

C:> java -classpath C:javaMyClasses utility.myapp.Cool
當該應用程式執行時,JVM 使用類路徑設定查詢在 utility.myapp 包中定義的任何其他類。
注意:應在命令中指定完整包名。例如,設定類路徑包含 C:javaMyClassesutility 並使用命令 java myapp.Cool 是不可能的,因為這找不到該類。

(您可能想知道用什麼定義類的包名。答案是:包名是類的一部分,並且不能修改,除非重新編譯該類。)

注意:包規範機制一個有趣的結果是,屬於相同包的多個檔案實際上可存在於不同的目錄中。對於每個類,包名都是相同的,但是每個檔案的路徑可從類路徑中的不同目錄開始。
資料夾和歸檔檔案
當類儲存在目錄(資料夾)中時,例如 c:javaMyClassesutilitymyapp,則類路徑項指向包含包名第一個元素的目錄(在這裡為 C:javaMyClasses,因為包名是 utility.myapp)。
但是當類儲存在歸檔檔案(.zip 或 .jar 檔案)中時,類路徑項則是該 .zip 或 .jar 檔案的路徑。例如,要使用位於 .jar 檔案中的類庫,則命令應該類似下述形式:

java -classpath C:javaMyClassesmyclasses.jar utility.myapp.Cool
多重指定
要在目錄 C:javaMyClasses 和 C:javaOtherClasses 中查詢類檔案,則可將類路徑設定為:
java -classpath C:javaMyClasses;C:javaOtherClasses ...
注意兩個路徑之間用分號分隔。
指定次序
指定多個類路徑項的次序是相當重要的。Java 直譯器將按照目錄在類路徑變數中的次序在各個目錄中查詢類。在上例中,Java 直譯器首先在目錄 C:javaMyClasses 中查詢需要的類。只有當它在該目錄中沒有找到該類時,直譯器才能到 C:javaOtherClasses 目錄中查詢。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-958042/,如需轉載,請註明出處,否則將追究法律責任。

相關文章