<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kooyee ‘s blog

    開源軟件, 眾人努力的結(jié)晶, 全人類的共同財(cái)富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Java Classpath全解

    Posted on 2007-07-14 05:42 kooyee 閱讀(1258) 評(píng)論(0)  編輯  收藏 所屬分類: Java
             java 的新入門者對(duì)classpath往往比較困惑,為何在開發(fā)環(huán)境中能運(yùn)行的東東出去就不好,或在外面運(yùn)行的東東挺溜的進(jìn)了開發(fā)環(huán)境就死菜,煩死了! 看完俺這篇文章包您萬事無憂(夸張點(diǎn)吧) :)呵呵
     
             java的優(yōu)點(diǎn)就是他是一個(gè)自動(dòng)支持網(wǎng)絡(luò)功能的東東,舉一個(gè)簡(jiǎn)單例子來將 比方有一個(gè)Application他用到了java.lang.String(事實(shí)上要是有一個(gè)程序沒用到它,太難以想象了 :)), 和com.shinechina.MyClass(我自己寫的兩個(gè)版本) 這兩個(gè)類
    版本1:
    package com.shinechina;
    public class MyClass 
    public static void main(String args[]) {
                 String str 
    = "版本1: hello, welcome to chinaasp java 技術(shù)"
                 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 技術(shù)"
           System.out.println(str); 
      }
     
    }
     


    現(xiàn)在我要運(yùn)行它了 java com.shinechina.MyClass 現(xiàn)在問題來了,也許com.shinechina.Myclass在c:, d:, 甚至在阿龍老兄,javabeans老兄,的機(jī)器上也有這么個(gè)東東,里面是些很cool的 java怎么知道到何處找呢?
     
    他到底該怎么辦 假定版本一在 c:/mylib/comshinechina/MyClass.java, 假定版本二在d:/mylib/comshinechina/MyClass.java 注意:不要忘了編譯成class文件吆, java文件是不能執(zhí)行的
    cd c:/mylib/comshinechina/ javac *.java
    cd d:/mylib/comshinechina/ javac *.java

    有了: 他先到機(jī)器的CLASSPATH去找。假設(shè)是windows系統(tǒng) c:/mylib;d:/mylib;d:/jdk1.2.2/lib/t.jar; 或unix系統(tǒng) /home/local/:/usr/local/:/usr/local/jdk1.2.2/lib/rt.jar 好, c:/mylib下他找到了com目錄,有戲, 又往下找又有shinechina目錄,目錄下找到了MyClass.class, Ok 就是他了, 至于d:/mylib我的版本2的MyClass他就不理會(huì)了, 至于String是在rt.jar壓縮包中待會(huì)再講他 執(zhí)行的結(jié)果就是:
    版本1: hello, welcome to chinaasp java 技術(shù) 

    反過來如果d盤的路徑在c:之前,執(zhí)行的結(jié)果就是
    版本2: hello, welcome to chinaasp java 技術(shù)

    依次類推, 只有在類路徑上第一個(gè)找到的才會(huì)執(zhí)行,你要控制他執(zhí)行那一個(gè)須如此: java -classpath d:/mylib;%classpath% com.shinechina.MyClass 執(zhí)行的結(jié)果就是
    版本2: hello, welcome to chinaasp java 技術(shù)

    開發(fā)環(huán)境中的執(zhí)行就是這樣,總有一個(gè)地方指定類路徑的

    注意,開發(fā)環(huán)境往往不去讀系統(tǒng)路徑, 這也就是在外面運(yùn)行的東東挺溜的進(jìn)了開發(fā)環(huán)境就死菜的原因嘍。 比如說jbuilder, jdevoloper從菜單project->project properties...->paths標(biāo)簽->Add...->添加定義好的library點(diǎn)ok或者new->輸入name和classpath->ok 這個(gè)東東就被添加到了classpath中(運(yùn)行時(shí)可在message view中看到)

    再比如說visualAge for java , 點(diǎn)中你要運(yùn)行的類->鼠標(biāo)右擊選中特性->類路徑標(biāo)簽
    1。->編輯->全選,好,開發(fā)環(huán)境中的所有類都能找到了
    2。->立即計(jì)算(只選中你需要的類, 如果有用class.forName之類通過程序顯式裝載的類的話,需要自己從編輯中手工家入了, 開發(fā)環(huán)境每能力幫你算出來了,如果內(nèi)存沒有問題的話,直接編輯->全選更方便吆)
    3。如果你的類并不想引入開發(fā)環(huán)境的話,點(diǎn)中添加額外路徑,編輯(下面的一個(gè)), 我不喜歡這樣, 就不詳細(xì)介紹了 高手的話,直接用jdk, 那么只好麻煩你要么加到系統(tǒng)classpath中(unix下為$CLASSPATH), 要么編譯運(yùn)行時(shí)顯式指明classpath

    下面介紹一個(gè)初學(xué)者最容易犯的錯(cuò)誤 還以上節(jié)介紹的例子 假定版本一在 c:/mylib/comshinechina/MyClass.java 編譯后c:/mylib/comshinechina/MyClass.class 怎么指定classpath呢?
    常見毛病 1。c:\mylib\comshinechina 2。c:\mylib\com
    正確 1。c:\mylib 2。c:\mylib


    設(shè)置類路徑結(jié)構(gòu)

    可通過對(duì) JDK 工具使用 -classpath 選項(xiàng)(首選方法)或設(shè)置 CLASSPATH 環(huán)境變量來設(shè)置類路徑。
    C:> jdkTool -classpath path1;path2...
    C:> set CLASSPATH=path1;path2...
    每個(gè) path 以文件名或目錄結(jié)尾,該文件名或目錄取決于將類路徑設(shè)置成什么:
    對(duì)于包含 .class 文件的 .zip 或 .jar 文件,路徑以 .zip 或 .jar 文件名結(jié)尾。 對(duì)于未命名包中的 .class 文件,路徑以包含 .class 文件的目錄結(jié)尾。 對(duì)于已命名包中的 .class 文件,路徑以包含“root”包(完整包名中的第一個(gè)包)的目錄結(jié)尾。 用分號(hào)來分隔多個(gè)項(xiàng)目。

    使用 set 命令時(shí),需要省略等號(hào)兩邊的空格(=)。其中 jdkTool 可以為 java、javac、javadoc,等等。有關(guān)詳細(xì)列表,參見 JDK 開發(fā)工具。 說明 類路徑告訴 Java 應(yīng)用程序去哪里查找第三方和自定義類 -- 即不是 Java 擴(kuò)展或 Java 平臺(tái)一部分的類。

    在 JDK 1.2 中,JVM 和其他 JDK 工具通過依次搜索平臺(tái)庫(kù)、庫(kù)擴(kuò)展和類路徑來查找類(有關(guān)搜索策略的詳細(xì)信息,參見如何查找類)。 多數(shù)應(yīng)用程序的類庫(kù)都會(huì)充分利用擴(kuò)展機(jī)制。因此,只有想要加載某個(gè)類庫(kù) (a) 未位于當(dāng)前目錄或其分枝包中 且 (b) 未位于擴(kuò)展機(jī)制所指定的位置時(shí),才需設(shè)置類路徑。

    如果用戶是從舊版本 JDK 升級(jí)而來,則啟動(dòng)設(shè)置可能包括不再需要的 CLASSPATH 設(shè)置。這時(shí)應(yīng)該刪除任何非應(yīng)用程序特定的設(shè)置。有些使用 Java 虛擬機(jī)的第三方應(yīng)用程序可能修改 CLASSPATH 環(huán)境變量以包括它們使用的類庫(kù)。這種設(shè)置可以保留。

    可通過在調(diào)用 JVM 或其他 JDK 工具時(shí)使用 Java 工具的 -classpath 選項(xiàng)改變類路徑(例如: java -classpath ...)。這是改變類路徑的首選方法。還可通過使用 CLASSPATH 環(huán)境變量改變類路徑。 注意:JDK 1.2 缺省類路徑是當(dāng)前目錄。設(shè)置 CLASSPATH 變量或使用 -classpath 命令行開關(guān)將覆蓋缺省值,因而如果想要在搜索路徑中包括當(dāng)前目錄,則必須在新設(shè)置中包括“.”。

    類可以存儲(chǔ)在目錄(文件夾)或歸檔文件(例如 classes.zip 或 classes.jar)中。有關(guān)歸檔文件的詳細(xì)信息和類路徑的工作原理,參見本文檔最后的理解類路徑和包名。

    重要說明:JDK 舊版本在缺省類路徑中還包括 /classes 項(xiàng)。該目錄僅供 JDK 使用,且不用于應(yīng)用程序類。應(yīng)用程序類應(yīng)該放置在 JDK 外部的目錄。這樣,安裝新 JDK 時(shí)不必需要重新安裝應(yīng)用程序庫(kù)。為了與舊版本的兼容性,使用 /classes 目錄作為類庫(kù)的應(yīng)用程序在當(dāng)前版本中仍能運(yùn)行,但不能保證在以后的版本中它們還能運(yùn)行。

    使用 Java 工具的 -classpath 選項(xiàng) Java 工具 java、jdb、javac 和 javah 具有 -classpath 選項(xiàng),在工具運(yùn)行時(shí)它將取代缺省類路徑或由 CLASSPATH 環(huán)境變量所指定的類路徑。這是改變類路徑設(shè)置的推薦方法,因?yàn)檫@樣每個(gè)應(yīng)用程序可具有它所需的類路徑而又不會(huì)干擾其他應(yīng)用程序。

    運(yùn)行時(shí)工具 java 和 jdb 還具有 -cp 選項(xiàng)。該選項(xiàng)是 -classpath 的縮寫。 對(duì)于非常特殊的情況,java 和 javac 都具有開關(guān),使得可改變它們使用的路徑以查找它們自己的類庫(kù)。但是,絕大多數(shù)用戶從來都不會(huì)用到這些開關(guān)。

    使用 CLASSPATH 環(huán)境變量 如前一節(jié)中所述,一般用戶將想要使用 -classpath 命令行選項(xiàng)。本節(jié)將介紹如何設(shè)置 CLASSPATH 環(huán)境變量或清除以前安裝遺留下的設(shè)置。

    1.設(shè)置 CLASSPATH 在 DOS 提示符下,可用 set 命令修改 CLASSPATH 環(huán)境變量。其格式為: set CLASSPATH=path1;path2 ... 路徑應(yīng)該以指定驅(qū)動(dòng)器的字母開頭,例如 C:...。這樣,在偶然切換到不同驅(qū)動(dòng)器時(shí)仍可找到類(例如,如果路徑項(xiàng)以 ... 開頭,并且當(dāng)前位于驅(qū)動(dòng)器 D: 上,則所需的類將在 D: 而不是 C: 驅(qū)動(dòng)器上找)。
     
    2.清除 CLASSPATH 如果 CLASSPATH 環(huán)境變量被設(shè)置成不正確的值,或啟動(dòng)文件或腳本程序設(shè)置了不正確路徑,則可通過使用下列命令清除 CLASSPATH: C:> set CLASSPATH= 該命令僅清除當(dāng)前會(huì)話的 CLASSPATH。要確保在以后的會(huì)話中具有正確的 CLASSPATH 設(shè)置,則應(yīng)該刪除或修改啟動(dòng)設(shè)置。

    更改啟動(dòng)設(shè)置 如果在系統(tǒng)啟動(dòng)時(shí)設(shè)置 CLASSPATH 變量,則查找它的位置取決于所使用的操作系統(tǒng): 操作系統(tǒng) 方法 Windows 98 和 Windows 95 檢查 autoexec.bat 文件中的 set 命令。 Windows NT 啟動(dòng)“控制面板”,選擇“系統(tǒng)”,單擊“環(huán)境”選項(xiàng)卡,并在“用戶變量”部分中,檢查 CLASSPATH 變量。 理解類路徑和包名 Java 類被組織成包,而這些包被映射到文件系統(tǒng)中的目錄。

    但是與文件系統(tǒng)不同的是,無論何時(shí)指定包名,都應(yīng)指定完整包名 -- 永遠(yuǎn)不要僅指定它的一部分。例如,java.awt.Button 的包名總是應(yīng)指定為 java.awt。 例如,假定想要 Java 運(yùn)行環(huán)境在包 utility.myapp 中查找名為 Cool.class 的類。如果該目錄的路徑為 C:javaMyClassesutilitymyapp,則應(yīng)該將類路徑設(shè)置成包含 C:javaMyClasses。 要運(yùn)行該應(yīng)用程序,可使用下述 JVM 命令: 

          C:> java -classpath C:\java\MyClasses\utility.myapp.Cool

    當(dāng)該應(yīng)用程序運(yùn)行時(shí),JVM 使用類路徑設(shè)置查找在 utility.myapp 包中定義的任何其他類。

    注意:應(yīng)在命令中指定完整包名。例如,設(shè)置類路徑包含 C:\java\MyClasse\sutility 并使用命令 java myapp.Cool 是不可能的,因?yàn)檫@找不到該類。 (您可能想知道用什么定義類的包名。答案是:包名是類的一部分,并且不能修改,除非重新編譯該類。)
     
    注意:包規(guī)范機(jī)制一個(gè)有趣的結(jié)果是,屬于相同包的多個(gè)文件實(shí)際上可存在于不同的目錄中。對(duì)于每個(gè)類,包名都是相同的,但是每個(gè)文件的路徑可從類路徑中的不同目錄開始。 文件夾和歸檔文件 當(dāng)類存儲(chǔ)在目錄(文件夾)中時(shí),例如 c:javaMyClassesutilitymyapp,則類路徑項(xiàng)指向包含包名第一個(gè)元素的目錄(在這里為 C:javaMyClasses,因?yàn)榘?utility.myapp)。

    但是當(dāng)類存儲(chǔ)在歸檔文件(.zip 或 .jar 文件)中時(shí),類路徑項(xiàng)則是該 .zip 或 .jar 文件的路徑。例如,要使用位于 .jar 文件中的類庫(kù),則命令應(yīng)該類似下述形式: java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool 多重指定 要在目錄 C:\java\MyClasses 和 C:\java\OtherClasses 中查找類文件,則可將類路徑設(shè)置為: java -classpath C:\java\MyClasses;C:\java\OtherClasses ... 注意兩個(gè)路徑之間用分號(hào)分隔。

    指定次序 指定多個(gè)類路徑項(xiàng)的次序是相當(dāng)重要的。Java 解釋器將按照目錄在類路徑變量中的次序在各個(gè)目錄中查找類。在上例中,Java 解釋器首先在目錄 C:\java\MyClasses 中查找需要的類。只有當(dāng)它在該目錄中沒有找到該類時(shí),解釋器才能到 C:\java\OtherClasses 目錄中查找。
    主站蜘蛛池模板: 亚洲毛片一级带毛片基地| 无遮挡国产高潮视频免费观看| 午夜a级成人免费毛片| 丰满人妻一区二区三区免费视频| 亚洲AV电影院在线观看| 天天看免费高清影视| 福利免费在线观看| 亚洲av永久综合在线观看尤物| 亚洲日本韩国在线| 99视频全部免费精品全部四虎 | 亚洲成在人天堂一区二区| 美女视频黄a视频全免费| 精品国产呦系列在线观看免费| 亚洲欧洲精品在线| 精品国产人成亚洲区| 永久免费的网站在线观看| 中文字幕手机在线免费看电影| 亚洲国产日韩精品| 亚洲Av永久无码精品三区在线| 日韩一级在线播放免费观看| 免费看又黄又无码的网站| 老外毛片免费视频播放| 亚洲人成网站18禁止久久影院 | 国产中文字幕免费| 8x网站免费入口在线观看| 一级毛片视频免费| 亚洲欧美自偷自拍另类视| 亚洲高清在线播放| 亚洲中文字幕成人在线| 免费精品一区二区三区在线观看 | 97久久免费视频| 一级免费黄色毛片| 亚洲精品乱码久久久久久V| 精品亚洲aⅴ在线观看| 亚洲中文字幕无码日韩| 免费欧洲美女牲交视频| 免费看片免费播放| 无码国产精品一区二区免费I6| 国产成人免费视频| 西西人体免费视频| 国产高清视频免费在线观看 |