1. 程式人生 > >Eclipse中JDK與JRE區別

Eclipse中JDK與JRE區別

JDK與jRE的區別

JDK(Java development kit):Java 開發工具,包括一系列java命令,如javac(java compiler) 等;同時jdk包含jre,因為jdk其實是面向java開發人員的,開 發完之後還要進行除錯執行等,這就需要jre了;

JRE(java runtime environment):java 執行時環境,java檔案被javac編譯過後形成位元組碼文 件,這個檔案計算機是不能理解和處理的,需要有jvm(java virtual machine)處理後形成機器語言在傳遞給計算機處理 (這也是為什麼說java具有平臺無關性)。Jvm就存在於jre 中。可見,jre其實是面向java程式的使用者;

所以,當你需要開發一個java程式時,你需要的是jdk,但如果需要執行一個java程式,就需要jre了。讓人迷惑的是,當你下載並安裝jdk之後,會發現在jdk資料夾內部和外部同時存在jre資料夾(證明了jdk包含jre),下面我們來說說其中的原因:

內部jre:當你開發java程式時,需要用到一些javac之類的命令,就會呼叫jdk(java開發  工具)內部的jre;

外部jre:當你只需要執行一個java程式而不是開發時,就會呼叫外部的jre;

那麼為什麼要分兩個呢?公用一個不就行了嗎,還節省了資源。其實分為兩個jre,更多的是為了提高效能和效率,開啟兩個jre的資料夾,對比一下會發現:

外部jre中,在其client資料夾裡面,有個jvm.dll;內部jre中,多了個server資料夾,其中也有個jvm.dll檔案,主要是兩個vm的區別,使得內外部jre有不同的分工,並且能在各自的分工上做到最好(提高各自的效率和效能)。

附上Oracle官網的一張截圖:


從這張圖中可以得到:JVMJREJDK

說到這裡,順便提一下windows下環境變數中的path和classpath,畢竟好記性不如爛筆頭!

安裝好jdk之後,下一步就要配置環境變量了,怎麼配置就不多說了,網上很多,簡單的說一下為什麼要分這兩個來配置:

path變數:與其中的值相對應的路徑下面是一些java命令程式,如javac;

Classpath變數:與其中值相對應的路徑下面是程式需要用到的一些java提供的類(jar包);

有時也用到JAVA_HOME環境變數,它指向jdk的安裝目錄,Eclipse/tomcat等就是通過其找到並使用安裝好的jdk。配置好之後,即可在任何目錄下用java命令執行java程式。那麼為什麼系統可以在任何目錄下使用JDK提供的命令呢?

其實環境變數就是能夠讓系統更快速方便的找到所需的東西,有興趣的可以看一下windows系統變數中的path變數中已有的值,例如C:\Windows\system32;,按這個路徑開啟,會發現裡面有很多可執行檔案,比如cmd.exe,這就是為什麼我們能夠在“執行”視窗輸入cmd之後就出現命令列的原因。說到這裡,你也可以試試利用環境變數啟動其他程式!

eclipse中的JDK與JRE:

其實寫這篇文章的出發點就是因為在Eclipse中用maven時,被各種jre、jdk搞得混亂,於是決定弄清楚。先簡單的介紹一下:

Eclipse:是一款整合開發的IDE,可以開發,編譯,除錯,執行程式碼等;

JDK:java開發工具,用來將.java檔案編譯成位元組碼檔案;

JRE:java執行時環境,執行編譯後得位元組碼檔案;

Maven:一款專案管理工具;

Eclipse中其實內嵌了Java編譯器,其編譯器的作用等同於jdk中的javac,所以eclipse其實只需要jre就可以編譯java檔案(在eclipse中當你儲存一個java類時,它就會自動編譯這個java類,相當於在命令列中用了javac這個命令)。但如果你在eclipse中用了maven這樣的工具,可能就無法編譯了。因為maven預設使用javac來編譯專案的,也就是需要jdk,而如果你的eclipse中某maven專案只指定了jre,就會出現無法編譯的情況。就像是啟動Tomcat只需要jre,原因是Tomcat中已經包括了原始碼編譯器,不需要jdk中的javac來編譯。

Eclipse中有幾處會用到jdk和jre的,下面列出幾個,也是我混亂之處所在:

A. Window->preferences->Java->Installed JREs


這裡Installed JREs中的可以理解為“全域性常量”,這裡設定好,之後新建的專案都預設用這裡選定的jre或者jdk,但如果專案中用了maven的話,前面說了maven預設的是jdk中的javac來編譯,所以如果這裡還是用jre的話就會maven install出錯,需要選擇jdk才行。更改直接Add->Standard VM,點選directory,選擇相應的jdk或者jre路徑確定即可。

B.給不同的專案選擇不同的jre

右擊專案名稱->build path->configure build path,選擇libraries選項卡,選中jre:


點選edit:


可根據不同的需求選擇不同的選項卡,並按照提示完成操作即可。注意,當你選擇第二個選項卡“替代JRE”時,eclipse會跳轉至installed jre中讓你選擇,因此,需要你提前在installed jre中配置好。

C. Window ->preferences->java->compiler


這裡也會有一個jdk的選擇,就是編譯時jdk的版本,需要注意的一點是:

編譯時的jdk版本不能高於專案build path中的jdk即執行時jdk,因為高版本中的有些功能在低版本中並不提供。例如,專案中用了泛型,編譯時為jdk1.5但執行時為jdk1.4,雖然編譯時不報錯,但執行時就會出錯,因為jdk1.4並不支援泛型;反過來,編譯時為jdk1.4而執行時為jdk1.5,雖然編譯時報錯,但卻可以正確執行。