理順JDK和環(huán)境變量

一、JDK的安裝

1矫钓、Java-Package choose

java_version

上述文檔翻譯:

  • JDK:針對Java開發(fā)者(Java developers)尖啡。包括了一個完整的JRE附加包工具项玛,該專用JRE附加包的目的是提供開發(fā)荞估,調(diào)試和模擬Java應(yīng)用程序咳促。

    JDK:Java SE Development Kit,Java開發(fā)環(huán)境勘伺。

  • Server JRE:針對的是在服務(wù)器上運行Java應(yīng)用程序的管理員跪腹。用于在服務(wù)器上部署Java應(yīng)用。包括了在服務(wù)器應(yīng)用上所需要的JVM監(jiān)控和公共工具飞醉,但是不包括瀏覽器集成(Java 插件)冲茸、自動更新、安裝。

  • JRE:針對的是在一個桌面環(huán)境上運行Java的最終用戶轴术。覆蓋了大多數(shù)的最終用戶的需求难衰,包含了在系統(tǒng)上運行Java程序所需要的一切

    JRE:Java Runtime Enviroment逗栽,Java運行環(huán)境盖袭。

2、3種安裝包解壓后的目錄結(jié)構(gòu)及說明

詳見: JDK和JRE目錄結(jié)構(gòu)

  • JDK目錄結(jié)構(gòu)

    - java_dir
      | - jdk1.8.0
           | - bin  
           | - lib  
           | - db
           | - src.zip
           | - jre  // 專用JRE
                | - bin  
                | - lib  
           | ...
         | - jre1.8.0  // 公共JRE
              | - bin  
              | - lib  
    

    針對/java_dir/jdk/ 目錄進行說明:

    • bin:存放開發(fā)工具的可執(zhí)行文件祭陷。
      • java苍凛,解釋器
      • javac趣席,編譯器
      • javadoc兵志,文檔工具,把API注釋提取成HTML文檔
      • jar宣肚,歸檔工具想罕,把包結(jié)構(gòu)打包成.jar文件
    • lib:開發(fā)工具所需要的類庫。
      • dt.jar
      • tools.jar
    • db:純Java開發(fā)的數(shù)據(jù)可 Derby霉涨,是一個開源的100%Java開發(fā)的關(guān)系數(shù)據(jù)庫
    • src.zip:所有java核心庫的源代碼
    • jre:java運行環(huán)境 - JVM
      • bin:存放JVM的執(zhí)行命令按价。
        • java,解釋器
      • lib:JVM運行所需要的核心類庫笙瑟。
        • rt.jar楼镐,引導(dǎo)類。(IDE中API的所在包)

    /java_dir/jre 目錄和java_dir/jdk/jre 目錄的內(nèi)容是一樣的往枷,都是用來運行Java程序的框产,即JVM。

  • Server-JRE目錄結(jié)構(gòu)

    - server-jre_dir
            | - jdk1.8.0
                 | - bin  
                 | - lib  
                 | - db
                 | - src.zip
                 | - jre  // 專用JRE
                      | - bin  
                      | - lib  
                 | ...
    

    ?

  • JRE文件樹

    - jre_dir
      | -jre1.8.0  // 公共JRE
          | - bin  
          | - lib
    

    ?

3错洁、JDK和JRE的結(jié)構(gòu)辨析

**官方說明: ** JDK和JRE圖示 圖示說明

JDK_JRE

圖示說明:

Java概念圖將Java組件技術(shù)分級分類秉宿。

  • JDK所包含的組件:
    • Java語言
    • 工具和工具API
    • 部署
    • 用戶界面工具包
    • 集成庫
    • 其他基礎(chǔ)庫
    • Lang和Util基礎(chǔ)庫
    • Java虛擬機
  • JRE所包含的組件:
    • 部署
    • 用戶界面工具包
    • 集成庫
    • 其他基礎(chǔ)庫
    • Lang和Util基礎(chǔ)庫
    • Java虛擬機
  • Java SE API 所包含的內(nèi)容:
    • 用戶界面工具包
    • 集成庫
    • 其他基礎(chǔ)庫
    • Lang和Util基礎(chǔ)庫

**分析: **

官方文檔中,可知JDK與JRE相比屯碴,獨有的部分是Java Language和Tools描睦、Tools API。也就是說导而,JRE不具備Java應(yīng)用程序開發(fā)的功能忱叭。

JDK = Server-JRE + JRE 。

  • 對于最終用戶:只需要Java運行環(huán)境來運行其電腦上的java程序今艺;因此韵丑,只安裝JRE就可以了。
  • 對于服務(wù)器:需要編譯洼滚、運行Java應(yīng)用埂息,而不需要訪問Java應(yīng)用;因此,只使用Server-JRE進行編譯千康、解釋享幽。
  • 對于Java開發(fā)者:開發(fā)Java程序時要編譯、解釋拾弃,同時作為用戶要運行其他Java應(yīng)用值桩;因此使用JDK。
  • 平常所說的Java自動更新豪椿,是指公共JRE的更新奔坟,以便適應(yīng)網(wǎng)站的技術(shù)更新;而不是JDK的自動更新搭盾。

javac和java命令:

jdk/bin 目錄下有javac和java命令(編譯咳秉、解釋);而在jdk/jre/binjre/bin 目錄下只有java命令(解釋)鸯隅。


二澜建、環(huán)境變量(Enviroment variable)的設(shè)置及作用

環(huán)境變量: 分為用戶變量和系統(tǒng)變量。

1蝌以、用戶變量(user variable)

只對當前用戶有效(windows下作用不大炕舵,linux下用處大),是為了減低自己所做的修改對他人造成的影響跟畅。

一般系統(tǒng)變量的路徑排在用戶變量之前咽筋,如果雙方都有的路徑,會使用系統(tǒng)變量中的值徊件。

2奸攻、系統(tǒng)變量(System variable)

1、JAVA_HOME變量(約定名稱庇忌,供JDK舞箍、其他軟件使用)

顧名思義: 這是Java的家,就是JDK文件夾的所在位置(安裝路徑)皆疹。

新建JAVA_HOME路徑C:\Program Files\Java\jdk1.8.0_131

作用: 指向JDK的安裝目錄:

  • 1疏橄、像eclipse/intellij等軟件可以借助該變量自動定位JDK
  • 2、tomcat等軟件只認定這個變量來定位JDK
  • 3略就、使用變量捎迫,修改JDK位置更加靈活(CLASSPATH、PATH的引用)

2表牢、CLASSPATH變量(約定名稱窄绒,專為JDK而使用)

顧名思義: 這是要查找的類/class文件的所在路徑,就是執(zhí)行javac 命令時:要查找的類的位置和相關(guān)的類庫位置崔兴。

已經(jīng)不需要新建CLASSPATH路徑了U玫肌;壮帷!.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

手工編譯.java文件的幾種情況:

假設(shè)C:\User\14002\Desktop\Print.java 是我們要編譯的java源文件位谋。

情況一:Print.java只是繼承于Object類山析,且不需要引入外部.jar文件。

  • 1掏父、絕對路徑編譯:

    打開DOS笋轨,處于任意路徑下,輸入:javac C:\User\14002\Desktop\Print.java 即可完成編譯赊淑。

  • 2爵政、相對路徑編譯:

    進入ODS,進入該文件所在目錄后陶缺,輸入:javac Print.java 即可钾挟。

情況二:Print.java繼承其他類,或者要引入其他.jar文件组哩。但是都在同一個目錄下等龙。

  • 編譯方式和情況一相同处渣。

情況三:Print.java繼承某個父類伶贰,如MyObject.java類」拚唬或者引用某個.jar文件黍衙,如MyJar.jar。但是都不在同一個目錄下荠诬。

  • 1琅翻、MyObject.class不在當前目錄中(C:\test\MyObject.class),需要手動指定該class文件所在目錄:

    javac -classpath C:\test\ C:\User\14002\Desktop\Print.java柑贞。

  • 2方椎、MyJar.jar不在當前目錄中(C:\test\MyJar.jar),需要指定位置:

    javac -classpath C:\test\MyJar.jar C:\User\14002\Desktop\Print.java 钧嘶。

為什么javac命令能執(zhí)行?

因為在PAHT路徑中配置的%JAVA_HOME%\bin 路徑幫助我們找到了該目錄下的javac.exe 執(zhí)行命令棠众。

CLASSPATH路徑的作用?

以下內(nèi)容來自《Java編程思想》有决。

1闸拿、Java 解釋器的工作程序如下:

首先,java.exe找到環(huán)境變量CLASSPATH书幕。

CLASSPATH 包含了一個或多個目錄新荤,它們作為一種特殊的“根”使用,從這里展開對.class 文件的搜索台汇。

從那個根開始苛骨,解釋器會尋找包名篱瞎,并將每個點號(句點)替換成一個斜杠,從而生成從CLASSPATH 根開始的一個路徑名(所以package foo.bar.baz 會變成foo\bar\baz 或者foo/bar/baz痒芝;具體是正斜杠還是反斜杠由操作系統(tǒng)決定)奔缠。

隨后將它們連接到一起,成為CLASSPATH 內(nèi)的各個條目(入口)吼野。

以后搜索.class 文件時校哎,就可從這些地方開始查找與準備創(chuàng)建的類名對應(yīng)的名字。

此外瞳步,它也會搜索一些標準目錄——這些目錄與Java 解釋器駐留的地方有關(guān)闷哆。

2、CLASSPATH是Java編譯器(javac.exe)的一個環(huán)境變量单起。

它的作用是指定類搜索路徑抱怔,它與import、package關(guān)鍵字有關(guān)嘀倒。

當你寫下improt java.util.* 時屈留,編譯器面對import關(guān)鍵字時,就知道你要引入java.util這個package中的所有類测蘑。

但是編譯器如何知道你把這個package放在哪里了呢灌危?

所以你首先得告訴編譯器這個package的所在位置。如何告訴它呢碳胳?就是設(shè)置CLASSPATH啦~

如果java.util這個package在c:\jdk\ 目錄下勇蝙,你得把c:\jdk\這個路徑設(shè)置到CLASSPATH中去!當編譯器面對import java.util.* 這個語句時挨约,它先會查找CLASSPATH所指定的目錄味混,并檢視子目錄java\util是否存在,然后找出名稱吻合的已編譯文件(.class文件)诫惭。如果沒有找到就會報錯翁锡!

當你自己開發(fā)一個package時,如果想要用這個package中的類夕土;自然馆衔,你也得把這個package所在的目錄設(shè)置到CLASSPATH中去!

然而隘弊,使用JAR 文件時要注意一個問題:必須將JAR文件的名字置于類路徑里哈踱,而不僅僅是它所在的路徑。所以對一個名為grape.jar 的JAR 文件來說梨熙,我們的類路徑需要包括:CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar

CLASSPATH的設(shè)定开镣,對JAVA的初學(xué)者而言是一件棘手的事。所以Sun讓JAVA2的JDK更聰明一些咽扇。你會發(fā)現(xiàn)邪财,在你安裝之后陕壹,即使完全沒有設(shè)定CLASSPATH,你仍然能夠編譯基本的JAVA程序树埠,并且加以執(zhí)行糠馆。

可以看出,CLASSPATH 里將會包含大量備用的搜索路徑怎憋。

但是又碌,在JDK 1.5之后,就沒有必要配置CLASSPATH了:

因為1.5版本以上JDK:

  • 1绊袋、它會自動搜索當前路徑下的類文件
  • 2毕匀、而且使用Java的編譯和運行工具時,系統(tǒng)可以自動加載dt.jar(是關(guān)于運行環(huán)境的類庫,主要是swing的包)和tools.jar(是關(guān)于一些工具的類庫)文件中的Java類

詳見: JDK官方安裝癌别、配置說明

3皂岔、PATH變量

**path變量的作用: **

windows系統(tǒng)根據(jù)環(huán)境變量中的PATH變量查找命令并執(zhí)行,如果找不到則出現(xiàn)“XXX不是內(nèi)部或外部命令展姐,也不是可運行的程序或批處理文件”錯誤躁垛。

path變量名不分大小寫,應(yīng)用程序或DOS界面會遍歷path的路徑來查找命令并調(diào)用圾笨。

path變量的應(yīng)用舉例:

path路徑的作用是為DOS命令(cmd)預(yù)設(shè)一大串的可供搜索命令來匹配 的目錄路徑教馆,比如在命令行想要調(diào)用mysql來登錄操作或者是使用git。

  • 想在DOS中使用mysql:

mysql.exe的路徑為:C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe 墅拭。

我們在PATH中添加一段路徑C:\Program Files\MySQL\MySQL Server 5.7\bin活玲;那么,我們在cmd中直接就可以調(diào)用mysql -u root -p來進行進行登錄了谍婉。

因為有對應(yīng)的PATH路徑存在,這條命令實際上找到了路徑下的mysql.exe來執(zhí)行我們的命令镀钓。

  • 想在DOS中使用git:

git.exe的路徑為:C:\Program Files\Git\cmd\git.exe穗熬。

我們在PATH中添加的路徑值為C:\Program Files\Git\cmd,同理丁溅,我們可以使用git 命令來執(zhí)行唤蔗。

舉一反三

  • 在DOS中啟動chrome:

你可以在用戶變量中的Path變量中加入chrome瀏覽器的路徑C:\Program Files (x86)\Google\Chrome\Application

那么你在cmd中輸入chrome窟赏,回車妓柜。即可啟動chrome瀏覽器。

因為chrome.exe的路徑是:C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

配置JDK需要的PATH路徑

顧名思義: path就是路徑了涯穷,是在開發(fā)中調(diào)用相關(guān)命令如 javacjava 的所在位置棍掐。

作用: 是在任何目錄下都能調(diào)用與java開發(fā)相關(guān)的命令。

追加PATH路徑%JAVA_HOME%\bin;

4拷况、路徑配置圖解:

- jdk1.8.0  (1作煌、JAVA_HOME)
    | - bin  (3掘殴、PATH)
    | - jre
    | - lib
         | - dt.jar     -->  [2、CLASSPATH]
         | - tools.jar  -->  [2粟誓、CLASSPATH]  .  -->  [2奏寨、CLASSPATH]

注意: 現(xiàn)在已經(jīng)不需要配置CLASSPATH路徑了。

5鹰服、MS-DOS下手動編譯病瞳、執(zhí)行java文件

Dos界面: 就是windows下的MS-DOS 方式,cmd是command的縮寫悲酷∪栽矗可以執(zhí)行一些命令。

1舔涎、在.../user/desktop/ 桌面上生成Print.java 文件:

public class Print {

    public static void main(String[] args){
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }

}

作用:打印傳入的每個參數(shù)笼踩。

String[] args 的作用是:在Docs界面,把執(zhí)行.class 文件時附帶傳進的所有參數(shù)(以空格隔開)分別存入args這個字符數(shù)組中亡嫌;之后可以使用args這個數(shù)組中的參數(shù)嚎于。

2、在Dos界面

  • 進入.java文件所在目錄挟冠。
  • javac 命令編譯Print.java 文件于购,得到Print.class 文件。
  • java 命令執(zhí)行.class文件知染,并傳入4個參數(shù)
  • 輸出java程序運行結(jié)果
dos

3肋僧、JDK的環(huán)境變量總結(jié)

在windows下:

  • 對于JDK:其實只需要設(shè)置PATH路徑即可,把xx/jdk/bin 目錄追加進去控淡。

    其專用JRE(xx/jdk/jre)可以自動被xx/jdk/bin/ 中的命令調(diào)用嫌吠。

    其公共JRE(xx/jre)自動被注冊到系統(tǒng)的注冊表當中,供其他應(yīng)用程序調(diào)用掺炭。

  • 對于JRE:不需要設(shè)置PATH路徑辫诅,直接使用即可。

    因為JRE在安裝時就自動被注冊到系統(tǒng)的注冊表當中了涧狮。

  • 因此炕矮,公共JRE會被自動注冊到系統(tǒng)的注冊表之中,無需配置者冤。

查看系統(tǒng)注冊表:

  • 1肤视、Win + R,輸入regedit涉枫。
  • 2邢滑、在[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft] 下有Java相關(guān)的注冊表記錄。

小結(jié)論:

  • 不管是在windows下還是linux下拜银,配置PATH變量的目的殊鞭,都是為了在DOS界面/CMD界面可以直接調(diào)用xx/jdk/bin 目錄中的java命令遭垛,也就是為了在java編程時使用IDEA等工具能正確編譯、執(zhí)行java程序操灿。

    所以PATH變量的目的是用于java開發(fā)锯仪。

  • 當需要運行Tomcat服務(wù)器時,由于Tomcat需要JRE環(huán)境趾盐,所以它根據(jù)系統(tǒng)的環(huán)境變量來尋找JRE的位置庶喜。詳見Tomcat官方安裝、配置說明

    • 安裝JDK的情況下救鲤,設(shè)置JAVA_HOME 即可久窟,Tomcat使用JAVA_HOME/jre 的JRE環(huán)境”静或者設(shè)置JRE_HOME 來指定公共JRE的位置斥扛。
    • 只安裝JRE的情況下,設(shè)置JRE_HOME 為JRE所在目錄即可丹锹。

三稀颁、Linux下JDK環(huán)境變量的設(shè)置

一般來說,我們解壓JDK的tar包的位置可能有:

  • /usr/local/ 目錄楣黍,這里存放用戶的應(yīng)用程序和文件匾灶,類似windows的program files 目錄。
  • /opt/ 目錄租漂,這是給主機額外安裝軟件的目錄阶女。

假設(shè)現(xiàn)在的JDK路徑為:/opt/java8/jdk1.8.0 目錄。

環(huán)境變量的配置:

1哩治、所有用戶的shell都有權(quán)訪問的環(huán)境變量秃踩,這種做法在多人情況下可能帶來安全性問題。

1锚扎、打開配置文件:vim /etc/profile 吞瞪。

2、輸入如下內(nèi)容:

export JAVA_HOME=/opt/java8/jdk1.8.0  # Tomcat運行需要JRE環(huán)境
export PATH=$JAVA_HOME/bin:$PATH  # 開發(fā)java時需要

# export是把變量導(dǎo)出為全局變量

3驾孔、讀取、執(zhí)行配置文件:source /etc/profile 惯疙。

4翠勉、查看JDK安裝:java -version

2霉颠、用戶級別的環(huán)境變量的控制对碌,也是最靠譜的方法。

如果需要給某個用戶權(quán)限使用這些環(huán)境變量蒿偎,只需要修改其個人用戶家目錄下的.bash_profile 文件就可以了朽们。

1怀读、打開用戶家目錄下的.bash_profile 文件:vim .bash_profile

2骑脱、輸入以下內(nèi)容:

# 同上一致

3菜枷、重新登錄

JDK的卸載:

進入JDK的安裝目錄的_uninst 目錄,在shell終端執(zhí)行命令:./uninstall.sh 即可叁丧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啤誊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拥娄,更是在濱河造成了極大的恐慌雨饺,老刑警劉巖子巾,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡肠套,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門捌显,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗眨,“玉大人,你說我怎么就攤上這事凄硼∏π” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵摊沉,是天一觀的道長狐史。 經(jīng)常有香客問我,道長说墨,這世上最難降的妖魔是什么骏全? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮尼斧,結(jié)果婚禮上姜贡,老公的妹妹穿的比我還像新娘。我一直安慰自己棺棵,他們只是感情好楼咳,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烛恤,像睡著了一般母怜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缚柏,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天苹熏,我揣著相機與錄音,去河邊找鬼。 笑死轨域,一個胖子當著我的面吹牛袱耽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播干发,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼朱巨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铐然?” 一聲冷哼從身側(cè)響起蔬崩,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搀暑,沒想到半個月后沥阳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡自点,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年桐罕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桂敛。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡功炮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出术唬,到底是詐尸還是另有隱情薪伏,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布粗仓,位于F島的核電站嫁怀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏借浊。R本人自食惡果不足惜塘淑,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚂斤。 院中可真熱鬧存捺,春花似錦、人聲如沸曙蒸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽窟。三九已至具滴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間师倔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趋艘,地道東北人疲恢。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像瓷胧,于是被迫代替她去往敵國和親显拳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容