1. 程式人生 > >為啥Eclipse需要JDK,而Myeclipse不需要

為啥Eclipse需要JDK,而Myeclipse不需要

1、首先說明的是,eclipse人家需要jre,而不需要jdk,人家內建的有。你只要在你的電腦上安裝一個jre就行。至於jdk,它內建的有
2、eclise也不要求你jdk或者jre配置環境變數,畢竟友不用notepad寫程式碼,dos編譯執行
3、myeclise之所以不需你安裝jdk或者是jre,要是應為它均有內建


關於eclipse裡配置的jdk與tomcat裡的版本
如果你eclipse配置使用了1.8的jdk,即編譯用1.8的java
但是你tomcat裡配置的jre確實1.7的
那麼當你給專案不熟專案的時候,他就會報錯,提示你--你用高版本的java(jdk)編寫並編譯的,我版本低執行不了


下邊是eclipse在不同情況下,對jdk或者jre不同的處理

簡析eclipse啟動過程
雙擊eclipse.exe
載入配置一些資訊
尋找javaw.exe、jvm.dll
這裡分幾種情況討論尋找過程
1.安裝了jdk+jre,沒有配置環境變數(jre安裝目錄為"D:\Program Files\Java\jre7\")
首先在exlipse.exe所在目錄的尋找是否有.\jre\bin
若沒有這個目錄
然後遍歷系統環境變數path目錄
在這個目錄找到了"C:\Windows\System32\javaw.exe"
接著查詢jvm虛擬機器
以javaw.exe為當前工作目錄,在javaw.exe下找有沒有
.\j9vm
..\jre\bin\j9vm\
.\client
..\jre\bin\client\
.\server
..\jre\bin\server\
.\classic
..\jre\bin\classic\
.\jrockit
..\jre\bin\jrockit\
如果這些沒有找到,則查登錄檔
HKLM\Software\JavaSoft\Java Runtime Environment
讀取版本資訊,讀完之後
讀該版本下RuntimeLib的值,然後查詢有沒有這個目錄
最終找到了D:\Program Files\Java\jre7\bin\client\jvm.dll
以這個jvm.dll所在目錄為準,返回兩層確定jre的目錄為D:\Program Files\Java\jre7\
再查詢jre目錄下有沒有.\lib\i386這個目錄,成功之後開始載入eclipse啟動需要的jar檔案(一般以org.eclipse開頭)
2.安裝了jdk+jre,path為jdk的bin目錄

(這裡配置為"D:\Program Files\Java\jdk1.7.0_65\bin\")
首先在exlipse.exe所在目錄的尋找是否有.\jre\bin
沒有這個目錄
然後遍歷系統環境變數path目錄
在這個目錄找到了"D:\Program Files\Java\jdk1.7.0_65\bin\javaw.exe"
接著查詢jvm虛擬機器
以javaw.exe為當前工作目錄,在javaw.exe下找有沒有
.\j9vm
..\jre\bin\j9vm\
.\client
..\jre\bin\client\
查詢到有D:\Program Files\Java\jdk1.7.0_65\jre\bin\client\這個目錄
查詢該目錄是否有jvm.dll
最終找到D:\Program Files\Java\jdk1.7.0_65\jre\bin\client\jvm.dll
以這個jvm.dll所在目錄為準,返回兩層確定jre的目錄為D:\Program Files\Java\jdk1.7.0_65\jre
再查詢jre目錄下有沒有.\lib\i386這個目錄,成功之後開始載入eclipse啟動需要的jar檔案(一般以org.eclipse開頭)
eclipse3.1\plugins\org.eclipse.jdt.source_3.1.0\src\org.eclipse.jdt.core_3.1.0\src.zip|org\eclipse\jdt\internal\compiler
3.安裝了jdk,沒有安裝jre,沒有配置環境變數

首先在exlipse.exe所在目錄的尋找是否有.\jre\bin
沒有這個目錄
然後遍歷系統環境變數path目錄
沒有找到javaw.exe報錯
4.只安裝了jre
情況同1,eclipse會讀取登錄檔的值來尋找jre的目錄
問:那麼用Eclipse開發需不需要安裝jdk?如果不需要,那java檔案時如何編譯成class的?
不需要,eclipse的JDT裡自帶編譯器,源程式在eclipse3.1\plugins\org.eclipse.jdt.source_3.1.0\src\org.eclipse.jdt.core_3.1.0\src.zip|org\eclipse\jdt\internal\compiler目錄下(注意自己的版本號)
問:"C:\Windows\System32\"為什麼會有javaw.exe這個檔案?
安裝jre的時候安裝程式複製了4個檔案到"C:\Windows\System32\"目錄,分別是Java.exe、javaw.exe、javaws.exe和WindowsAccessBridge.dll.也就是說用java -version命令和java [class檔名]驗證jdk的path環境變數並不靠譜,用javac 命令才是最準確的

問:查詢jre目錄下有沒有.\lib\i386這個目錄的作用

確定使用的jre是32位的還是64位的,64位的Eclipse不能用32位的jre

Eclispe第一次啟動要求使用者必須安裝jre,這是因為?
Eclipse的執行依賴於jdk和jre。Eclipse也是java語言開發的,就像遊戲‘我的世界’一樣

Eclispe第一次啟動要求使用者必須安裝jre某個版本,是因為?
是因為一般eclise的開發是基於當下最新版本的java語言的,比如今年是2017年,那麼我下載的eclispe Version: Neon.2 Release (4.6.2)就必須要求我jre是8版本的
不然無法啟動。
而且你一旦安裝好jre8(其實我是安裝jdk的,因為jdk裡附帶有jre。單獨的jre不好找),進入eclpse後,預設的專案執行環境就是jre8.當然它預設設定的編譯環境也是jdk8


設定jre和jdk
jre有兩個地方可以設定,一個在eclispe>window>preferences>java>instaled jre
一個是在你的專案中。專案右鍵>properties>libraris
不過最終其決定性作用的還是後者。前者是給eclispe設定幾個的(需要選擇一個預設的,如果專案沒有確定的話,將使用這個預設的),後者是給專案設定具體使用哪個
jdk其實就是編譯環境,只有一個地方設定,且起到決定所有專案的作用,即你寫完程式碼,儲存就開始執行編譯,在eclispe>window>preferences>java>compiler
對於jre和jdk版本之間,要求儘量還是版本一致,不然容易出錯


建立一個專案
其實eclipse,不只是內建了jdk(compire),也內建了jre,而且有很多版本。
我不知道網上為啥說eclispe啟動需要jre是因為eclispe內建沒有jre,而寫專案執行時候需要jre,所以才。。。
不知道是你們沒有仔細看還是怎麼回事。我的理解為什麼eclispe需要jre原因在上上上一條和上上一條我總結的。

 

如果jre與jdk不一致怎麼辦?
1、如果設定的compiler即jdk(1.8)>jre(1.5)
當你建立專案時候,選擇的是jre1.5,會提示你
The default compiler compliance level for the current workspace is 1.8. The new project will use a project specific compiler compliance level of 1.5.
當前工作區的預設編譯器為1.8。新專案將使用一個特定於專案的編譯器1.5(沒辦法啊,因為你專案非要用1.5的jre,那人家只能給你單獨配置一個jdk1.5的編譯器去編譯了)。
2、如果compiler(1.5)>jre(1.8)
比如我建立了個jre為1.8的專案,然後我去修改compiler即jdk的版本至1.5,則會提示
When selecting 1.5 compliance, make sure to have a compatible JRE installed
and activated (currently 1.8)
當選擇了1.5編譯器(指compiler即jdk),確保有一個相容的JRE
的執行環境(當前1.8)