2010-01-04

PATH 與 CLASSPATH

整理自竹師風之坊java精華區(bbs://140.126.22.6)

設定 path 是告訴系統, 執行檔程式位於什麼地方
主要是在執行 javac 跟 java 這兩個程式時使用的
也就是當你在命令列打入 javac xxx.java 和 java xxx 時
系統要去那裡找 javac 和 java 這兩個執行檔

設定 classpath 是告訴 Java
要使用或執行的 class 檔所在的路徑
比如說: 我們輸入 "java A" 命令 要求 Java 執行 A.class 這個類別檔時
Java 會由 classpath 所設定的路徑位置開始尋找 A.class
所以如果你沒有設定, 那 Java 就會跟你說他找不到
就算你是在 A.class 所在的路徑執行這個命令
也要在 classpath 裡面跟 Java 說 要到目前所在的路徑尋找 A.class
否則 Java 還是找不到的
另外 如果 A.class 裡面用到 B.class 時
在 classpath 設定中也要包含 B.class 所在的路徑

在較新版本的 SDK 中
並不需要在 classpath 裡面設定 SDK 原有的 class 檔或 jar 檔路徑
程式已經將路徑預設好了
你只需要設定額外的類別檔路徑就可以了

設定如下:

在 Windows 95/98 平台中

設定的方法為 用文字編輯器 (如小作家, notepad 等等)
編輯 c:\autoexec.bat
在裡面加入
SET PATH=C:\jdk\bin\
SET CLASSPATH=.;C:\java\class\;C:\java\jar\b.jar

如果這個檔案裡面原來就有 SET PATH 或 SET CLASSPATH
那就將路徑加在原來那行後面 並用 ; 隔開
( 在 J2SDK1.3 版之後的 Windows 版本
如果 CLASSPATH 沒有設定的話
Java 會預設為 CLASSPATH=.;
如果你有設定 則以設定的為主)

如果不設定
則可以用
c:\> c:\jdk\bin\java -cp c:\java\class\;c:\java\jar\b.class;c:\java\test\ xxx
來執行

設定好之後就可以簡化成
c:\> java xxx

在 Linux 底下
若路徑為
/usr/local/java/bin/java
/usr/local/java/bin/javac
/usr/local/class/a.class
/usr/local/jar/b.jar
/home/test/java/xxx.java
/home/test/java/xxx.class

則需在 /etc/profile (所有帳號共用) 加入
PATH=/usr/local/bin/:$PATH
CLASSPATH=./:/usr/local/class/:/usr/local/jar/b.jar
export PATH CLASSPATH

PS:
1. 以上設定好之後, 最好重新開機, 或重新登入,
反正就是要系統重新執行這個檔案
2. = 號兩側不可以有空白
3. Java 是會區分大小寫的, 不要把類別檔的大小寫 寫錯了
4. 設定中的 . 是代表使用者目前所在目錄

安裝其他套件之 ClassPath 設定

一般來說 當下載新的套件時
需要將新套件的路徑設定到 CLASSPATH 中
比如說
下載 JavaMail 裡面有 mail.jar 放在
c:\javamail\mail.jar 或是 /usr/local/javamail/mail.jar
那原來的 CLASSPATH 後面就要加上
;c:\javamail\mail.jar 或是 :/usr/local/javamail/mail.jar

還有要注意的是
如果安裝的是 server
如 JServ 或 Tomcat 這一類的程式
那也要把原來 classpath 設定的路徑
寫入到 Jserv 或 Tomcat 這些程式的設定檔中
這樣這些 server 才知道要去哪裡找 class

轉錄自java連線版

作者: TAHO (癡人) 看板: java
標題: PATH & CLASSPATH
時間: Mon Jan 28 23:18:06 2002

看來這個問題又開始出現了

如果有用過 DOS 系統的人 應該可以瞭解 PATH 是在幹嘛的
這個 PATH 並不是給 Java 用的
早在沒有 Windows 的 DOS 時代 就有這個東西了.....
因為 DOS 沒有所謂的 "捷徑"
所以如果你要執行程式 那你必須給他 "完整路徑"
除非那個程式是在使用者的正處於的目錄

比如說 c:\windows\commands\edit.exe
如果你在
C:\windows\commands> edit
這樣當然可以
如果你是在
C:\> edit
他就會跟你說 找不到這個 edit.exe
因為這檔案不在 C:\ 底下
你也不能期望電腦會把你所有硬碟目錄全部都搜尋一遍 找出可能的檔案
如果這樣 那過不了多久你的硬碟可以就開始壞軌了
所以你必須打完整路徑
C:> c:\windows\commands\edit
但是每次都這樣打實在太麻煩∼∼
所以就發明了一個 "系統變數",也就是 OS 會去使用的設定
只要這樣設定 PATH=C:\windows\commands\
那不論你在哪裡打 edit,他會先去找目前目錄底下有沒有這個程式
如果沒有 就去 PATH 的路徑找....
當然 不只有 edit,只要是打任何指令 在目前目錄底下找不到的
他就會去 PATH 設定的地方找
所以你瞭解為什麼要設定到 JDK 的 bin 目錄底下嗎?
因為 java.exe 跟 javac.exe 等等指令都在這目錄底下
所以你安裝完 JDK 之後有三種選擇可以執行命令
1. 直接到 javac.exe java.exe 所在的目錄底下去打指令 (麻煩...)
2. 每次打命令都打完整路徑 (通常很長....)
3. 設定系統變數 PATH 到 JDK 的 bin 目錄

同樣的所謂的 JVM 就好像是 OS 上面再啟動一個 OS
對 JVM 來說 CLASSPATH 就好像是對 OS 來說的 PATH
JVM 是由 java.exe 這個程式啟動的
而且別忘了 java.exe 並不是在使用者的路徑下
所以他會去 java.exe 所在的目錄底下去找 .class 檔
除非你的 .class 檔放在跟 java.exe 同一個目錄
否則他是找不到 .class 在哪裡的....
所以我們要設定一個路徑 讓 JVM 可以去這個路徑尋找你要他執行的 .class
所以你一樣有三種方法可以執行
1. 把所有的 .class 都放到 java.exe 的相對目錄底下 ( 很難管理... )
2. 每次都打完整路徑, 也就是使用 -cp 的選項
比如 java -cp .;c:\myclass\ Test
(其中那個句點 . 表示使用者打這個指令時 所在的目錄)
(常打的話很煩 ... )
3. 設定系統變數 CLASSPATH 到你的 class 的位置

至於系統變數怎麼設定 那要看你在那個平台 依據平台的設定
( 當然 系統變數不只這兩個, 就算你都沒有去設定
通常安裝完 OS, OS 就會預設一堆系統變數
你只是多手動的加了兩個 )

當然你都不設定也是可以∼∼
只是很麻煩
比如說你安裝的路徑是
C:\JDK1.3.1\
D:\myclass\Test.class
其中 Test 用到 E:\extclass\Util.class
那你每次執行要打
c:\JDK1.3.1\bin\java -cp e:\extclass;d:\myclass Test
如果你不嫌煩的話 不用設定也是無所謂啦

winder wrote:
請問CLASSPATH在WINDOWS XP是不是在環境變數中設阿



是的。控制台-->系統-->進階-->系統變數

請環境變數中沒看到CLASSPATH是不是要自己新增呢 還有新增後是不是也要加上.;之後再加上自己所要加的其他CLASSPATH 如.;c:\jdk1.1.8\lib\comm.jar;
麻煩各位高手告知謝謝



如果沒有CLASSPATH可以自己新增一個,如果新增在[系統變數]這一區代表
這台電腦的所有使用者都可以參考CLASSPATH。

至於 [.;] 則可以不用加。

http://www.javaworld.com.tw/jute/post/view?bid=29&id=9554&sty=1&tpg=1&age=0

沒有留言:

張貼留言