Java-基礎(chǔ)-classpath和jar

1漏设、classpath

classpath是JVM用到的一個環(huán)境變量订咸,它用來指示JVM如何搜索class氏涩。
因為Java是編譯型語言,源碼文件是.java磺芭,而編譯后的.class文件才是真正可以被JVM執(zhí)行的字節(jié)碼赁炎。因此,JVM需要知道钾腺,如果要加載一個abc.xyz.Hello的類徙垫,應(yīng)該去哪搜索對應(yīng)的Hello.class文件。

所以放棒,classpath就是一組目錄的集合姻报,它設(shè)置的搜索路徑與操作系統(tǒng)相關(guān)。例如间螟,在Windows系統(tǒng)上吴旋,用;分隔损肛,帶空格的目錄用""括起來,可能長這樣:

C:\work\project1\bin;C:\shared;"D:\My Documents\project1\bin"

在Linux系統(tǒng)上荣瑟,用:分隔治拿,可能長這樣

/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin

現(xiàn)在我們假設(shè)classpath是.;C:\work\project1\bin;C:\shared,當JVM在加載abc.xyz.Hello這個類時褂傀,會依次查找:

1.<當前目錄>\abc\xyz\Hello.class

2.C:\work\project1\bin\abc\xyz\Hello.class

3.C:\shared\abc\xyz\Hello.class

注意到.代表當前目錄忍啤。如果JVM在某個路徑下找到了對應(yīng)的class文件,就不再往后繼續(xù)搜索仙辟。如果所有路徑下都沒有找到同波,就報錯。

classpath的設(shè)定方法有兩種:

1.在系統(tǒng)環(huán)境變量中設(shè)置classpath環(huán)境變量叠国,不推薦未檩;

2.在啟動JVM時設(shè)置classpath變量,推薦粟焊。
我們強烈不推薦在系統(tǒng)環(huán)境變量中設(shè)置classpath冤狡,那樣會污染整個系統(tǒng)環(huán)境。在啟動JVM時設(shè)置classpath才是推薦的做法项棠。實際上就是給java命令傳入-classpath或-cp參數(shù):

java -classpath .;C:\work\project1\bin;C:\shared abc.xyz.Hello

或者使用-cp的簡寫:

java -cp .;C:\work\project1\bin;C:\shared abc.xyz.Hello

沒有設(shè)置系統(tǒng)環(huán)境變量悲雳,也沒有傳入-cp參數(shù),那么JVM默認的classpath為.香追,即當前目錄:

注意:不要把任何Java核心庫添加到classpath中合瓢!JVM根本不依賴classpath加載核心庫!

java abc.xyz.Hello

上述命令告訴JVM只在當前目錄搜索Hello.class透典。

2晴楔、jar包

如果有很多.class文件,散落在各層目錄中峭咒,肯定不便于管理税弃。如果能把目錄打一個包,變成一個文件凑队,就方便多了则果。

jar包就是用來干這個事的,它可以把package組織的目錄層級顽决,以及各個目錄下的所有文件(包括.class文件和其他文件)都打成一個jar文件短条,這樣一來,無論是備份才菠,還是發(fā)給客戶茸时,就簡單多了
jar包實際上就是一個zip格式的壓縮文件,而jar包相當于目錄赋访。如果我們要執(zhí)行一個jar包的class可都,就可以把jar包放到classpath中:

java -cp ./hello.jar abc.xyz.Hello

這樣JVM會自動在hello.jar文件里去搜索某個類

如何創(chuàng)建jar包缓待?

因為jar包就是zip包,所以渠牲,直接在資源管理器中旋炒,找到正確的目錄,點擊右鍵签杈,在彈出的快捷菜單中選擇“發(fā)送到”瘫镇,“壓縮(zipped)文件夾”,就制作了一個zip文件答姥。然后铣除,把后綴從.zip改為.jar,一個jar包就創(chuàng)建成功鹦付。

這里需要特別注意的是尚粘,jar包里的第一層目錄,不能是bin敲长,而應(yīng)該是hong郎嫁、ming、mr

jar包還可以包含一個特殊的/META-INF/MANIFEST.MF文件祈噪,MANIFEST.MF是純文本泽铛,可以指定Main-Class和其它信息。JVM會自動讀取這個MANIFEST.MF文件辑鲤,如果存在Main-Class厚宰,我們就不必在命令行指定啟動的類名,而是用更方便的命令:

java -jar hello.jar

jar包還可以包含其它jar包遂填,這個時候,就需要在MANIFEST.MF文件里配置classpath了澈蝙。

在大型項目中吓坚,不可能手動編寫MANIFEST.MF文件,再手動創(chuàng)建zip包灯荧。Java社區(qū)提供了大量的開源構(gòu)建工具礁击,例如Maven,可以非常方便地創(chuàng)建jar包逗载。

小結(jié)

1.JVM通過環(huán)境變量classpath決定搜索class的路徑和順序哆窿;

2.不推薦設(shè)置系統(tǒng)環(huán)境變量classpath,始終建議通過-cp命令傳入厉斟;

3.jar包相當于目錄挚躯,可以包含很多.class文件,方便下載和使用擦秽;

4.MANIFEST.MF文件可以提供jar包的信息码荔,如Main-Class漩勤,這樣可以直接運行jar包。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缩搅,一起剝皮案震驚了整個濱河市越败,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硼瓣,老刑警劉巖究飞,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堂鲤,居然都是意外死亡亿傅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門筑累,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱蜡,“玉大人,你說我怎么就攤上這事慢宗∑阂希” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵镜沽,是天一觀的道長敏晤。 經(jīng)常有香客問我,道長缅茉,這世上最難降的妖魔是什么嘴脾? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蔬墩,結(jié)果婚禮上译打,老公的妹妹穿的比我還像新娘。我一直安慰自己拇颅,他們只是感情好奏司,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樟插,像睡著了一般韵洋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黄锤,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天搪缨,我揣著相機與錄音,去河邊找鬼鸵熟。 笑死副编,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的流强。 我是一名探鬼主播齿桃,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惑惶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了短纵?” 一聲冷哼從身側(cè)響起带污,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎香到,沒想到半個月后鱼冀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡悠就,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年千绪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梗脾。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荸型,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炸茧,到底是詐尸還是另有隱情瑞妇,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布梭冠,位于F島的核電站辕狰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏控漠。R本人自食惡果不足惜蔓倍,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盐捷。 院中可真熱鬧偶翅,春花似錦、人聲如沸碉渡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爆价。三九已至,卻和暖如春媳搪,著一層夾襖步出監(jiān)牢的瞬間铭段,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工秦爆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留序愚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓等限,卻偏偏與公主長得像爸吮,于是被迫代替她去往敵國和親芬膝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355