關於Java 的 Classpath全解<之一>
作者 丑丑牛
聲明: 歡迎轉載, 如果能不把俺的little大名刪掉最好
Java 的新入門者對classpath往往比較困惑,為何在開發環境中能運行的東東出去就不好,或在外面運行的東東挺溜的進了開發環境就死菜,煩死了!
看完俺這篇文章包您萬事無憂(誇張點吧) :)呵呵
Java的優點就是他是一個自動支持網絡功能的東東,舉一個簡單例子來將
比方有一個Application他用到了Java.lang.String(事實上要是有一個程序沒用到它,太難以想象了 :)), 和com.shinechina.MyClass(我自己寫的兩個版本) 這兩個類
版本1:
package com.shinechina;
public class MyClass
{
public static void main(String args[])
{
String str = "版本1: hello, welcome to chinaASP Java 技術";
System.out.println(str);
}
}
版本2:
package com.shinechina;
public class MyClass
{
public static void main(String args[])
{
String str = "版本2:hello, welcome to chinaASP Java 技術";
System.out.println(str);
}
}
現在我要運行它了
Java com.shinechina.MyClass
現在問題來了
也許com.shinechina.Myclass在c:\, d:\, 甚至在阿龍老兄,Javabeans老兄,的機器上也有這麼個東東,裡面是些很cool的
Java怎麼知道到何處找呢, 他到底該怎麼辦
假定版本一在 c:\mylib\com\shinechina\MyClass.Java
假定版本二在 d:\mylib\com\shinechina\MyClass.Java
注意:不要忘了編譯成class文件吆, Java文件是不能執行的
cd c:\mylib\com\shinechina
javac *.Java
cd d:\mylib\com\shinechina
javac *.Java
有了:
他先到機器的CLASSPATH去找
假設是Windows系統 c:\mylib;d:\mylib;d:\jdk1.2.2\lib\rt.jar;
或unix系統 /home/local/:/usr/local/:/usr/local/jdk1.2.2/lib/rt.jar
好, c:\mylib下他找到了com目錄,有戲, 又往下找又有shinechina目錄,目錄下找到了MyClass.class, Ok 就是他了, 至於d:\mylib我的版本2的MyClass他就不理會了, 至於String是在rt.jar壓縮包中待會再講他
執行的結果就是
版本1: hello, welcome to chinaASP Java 技術
反過來d盤的路徑在c:之前,執行的結果就是
版本2: hello, welcome to chinaASP Java 技術
依次類推, 只有在類路徑上第一個找到的才會執行,你要控制他執行那一個須如此:
Java -classpath d:\mylib;%classpath% com.shinechina.MyClass
執行的結果就是
版本2: hello, welcome to chinaASP Java 技術
開發環境中的執行就是這樣, 總有一個地方指定類路徑的
<未完待續>