如何設置CLASSPATH,是初學者常提出的問題。網上有很多文章提到了許多如何設置的方法,但是都沒有講為什麼要這樣設置(令人感到悲哀的是:絕大部分的人的觀點是不正確的)。
為了幫助大家更好的學習Java的基本知識,同時也是鍛煉自己的Type水平,於是有了這篇文章的誕生。主要參考資料來自來自官方JDK文檔,希望對大家有用(所說的觀點針對1.4.2 and 5.0版本)。
1. 預備知識
1.1安裝JDK
到http://Java.sun.com 根據不同的操作系統,下載相應的J2SE JDK 版本 (寫這篇文章時最新的JDK 為1.5 update 7)。假定我們把JDK安裝到D:\JDK\1507 ,不安裝public JRE。
1.2 設置path
在[我的電腦]上右擊,選擇[屬性]。再選擇[高級]-[環境變量],在[系統變量]中添加一個新的變量
JAVA_HOME=D:\JDK\1507,然後再編輯path變量,在原來的path前面添加[ %Java_HOME%\BIN; ]
(方框中的文字)。這樣就完成了Java的基本設置。(Windows 98 下如何在autoexec.bat 中設置,請自己找資料)
1.3 演示程序
為了幫助理解,我寫了一個JavaBootTest.Java 的小程序來顯示。
public class JavaBootTest {
public static void main(String[] args) {
System.out.println(" The Classpath are: ");
System.out.println(System.getProperty("Java.class.path"));
//other program lines
}
}
用下面的兩條命令分別編譯和運行。
javac JavaBootTest.Java
java JavaBootTest
2. Java程序運行時如何查找類文件
根據JDK 文檔說明, Java 程序以以下3種順序查找運行的類文件。
1.Bootstrap classes (*)
2.Extension classes
3.Users classes
2.1 Bootstrap classes
就是Java在啟動時載入的類文件,這些類文件主要是rt.jar 和 jre/lib 目錄下的一些類文件。Bootstrap過程中的class path是保存在 sun.boot.class.path 系統屬性中的。可以通過System.out.println(System.getProperty("sun.boot.class.path")); 來顯示。同時Bootstrap classes 可以通過 -Xbootclasspath 命令行參數來指定。
下面列出了系統中默認的Bootstrap classes:
jre\lib\rt.jar; jre\lib\i18n.jar;
jre\lib\sunrsasign.jar; jre\lib\JSse.jar;
jre\lib\jce.jar; jre\lib\charsets.jar;
jre\classes
* Bootstrap
bootstrap是皮鞋後部的一條小帶子或一個小環,它可以使你方便地把鞋子穿起來。在計算機中,是指使用一個很小的程序將某個特定的程序(通常是指操作系統)載入計算機中。
2.2 Extension classes (擴展類文件)
Extension classes 主要是指的jre/lib/ext 目錄下的類文件,這些文件必須在jar 文件或 zip 文件中。如果不同名字的jar 文件包含有相同的類文件,那麼哪一個類文件被載入是不確定的。
2.3 User classes (用戶自定義的類文件)
現在到了最重要的地方了,我們常說的設置CLASSPATH 其實就是指定 User classes。Java 按照以下四種順序查找User classes。
2.3.1. 默認的User classes . (dot) 就是指當前目錄。
2.3.2. 系統變量 CLASSPATH 所指定的類庫,該變量覆蓋(override)默認的User classes。
2.3.3. 用命令行參數 -cp 或 -classpath指定的類庫。這個時候覆蓋默認的User classes 和CLASSPATH變量。
2.3.4. 通過-jar 參數指定的jar文件。此時覆蓋上面的三種情況,如果使用這種情況,所有的類文件必須來自指定的jar 文件。
了解了Java如何查找User classes,我們接下來將要學習如何設置 CLASSPATH變量。
3 如何正確設置CLASSPATH
如果只是一般運用java,只是用到Java的基本庫文件,練練手而已,則不需要設置CLASSPATH 。
但是在一般開發情況下,這是很少遇到的。所以我們要自己設置CLASSPATH 。
我們一般的方法就是按照2.3.2 來設置CLASSPATH 系統變量,像開始設置path一樣,我們可以添加一個CLASSPATH的系統變量。網上有些文章所提到的添加rt.jar 和 tools.jar 等等是不需要的,因為這些類庫是屬於Bootstrap classes的。我們只要定義User classes ,如果我們要編譯servlet 那麼只要servlet-api.jar 和 JSP-api.jar 就可以實現基本的需要了。
另外要注意的是2.3.2 override 2.3.1。我們設置CLASSPATH 時要將 .(dot)[表示當前目錄]放在CLASSPATH中,然後用 ;(semicolon)分隔開來。由於其他提供的類文件都是放在jar文件中,我們設置時一定要將完整的jar 文件包含在CLASSPATH 中,而不是將其目錄添加到CLASSPATH 中(很重要的一點,我以前就是理解錯誤了)。
這個時候又一個問題出現了,當需要添加的jar 文件過多時,管理java 類庫變得很麻煩。所以我認為在基礎學習時用命令行編譯調試,有利於Java的學習,但是到開發時則一定要用到 IDE 工具(現在比較流行的是eclipse 和 netbeans ,還有些人喜歡 jcreator) 。
在eclipse 中通過 [Windows][Preferences][Java][Build Path]來指定。其中有兩部分Classpath Variables & User LibrarIEs。如何設置在這裡就不詳細說明了,自己試一下就可以了,比較簡單。在新建項目時,把自己定義的變量添加到Build Path 中就可以了。