轉載:http://blog.csdn.net/wdjhzw/article/details/42086615
本文的主角就是這個十分令人糾結地方,至少令我這個初學者十分糾結…
先來看看官方的解釋(鏈接)
Use default JRE:When selected, the New Java Project Wizard creates a new Java project which uses the workspace default JRE. The default JRE can be configured on the Java > Installed JREs preference page.The project will also use the default compiler compliance which can be configured on the Java > Compiler preference page.Click on Configure default... to configure the default JRE and compiler compliance.Use project specific JRE:When selected, you can explicitly specify the JRE to be used for the new Java project. The new project will use a compiler compliance which matches the version of the selected JRE.Use an execution environment JRE:When selected, you can specify an execution environment to be used for the new Java project. The new project will use a compiler compliance which fits best the selected execution environment.Execution environments can be configured on the Java > Installed JREs > Execution Environmentspreference page.
其實官方的解釋客觀來講應該是解釋清楚了的,但是他在解釋的同時,又帶出了其余的陌生概念,就是這個compiler compliance。那就先把這個compiler compliance的概念搞清楚。
首先,設置他的地方在這里 Java > Compiler
可以看到,設置他的參數描述是 Compiler compliance level,直譯是“編譯器服從的等級”。其后的下拉菜單可以選擇JDK的版本。其實,這個參數是設置你的class的運行等級,即你的程序是以哪種版本的JDK進行編譯,所以得到的class至少要在這個版本的JRE上運行才行。
舉個例子:
比如你的JDK版本是1.7,默認情況下你的Compiler compliance level應該是1.7,因為JRE本來就是為對應版本的JDK開發的程序所服務的。新的JDK提供了更多的功能,而這些功能都要有對應的JRE(至少是對應的JRE)來提供運行環境。所以你的JDK的版本要大於等於Compiler compliance level的版本才行。
之所以提供了這個參數選項,是考慮到將當前編寫的程序放到低版本的JRE環境中運行的這種狀況。同時,為了能夠順利保證可以在低版本的JRE上運行,你要時刻保證不能使用高版本的JDK中提供的API,道理顯而易見。
最后,你必須安裝對應的低版本的JRE來運行這個經過降級編譯的程序,否則他提示你安裝對應版本的JRE。如圖。
compiler compliance介紹完了,下面就來說說建工程時這三個JRE選項具體要怎么對待。
1.先說Use default JRE:
你會注意到,我解釋compiler compliance時的最后那張圖上,有一個Configure…跳轉。
他會跳轉到這里 Java > Installed JREs
在這里,你可以配置你電腦中的JRE,只要你想,從1.1到1.7,當然現在最新有1.8,所有版本的JRE你都可以安裝,並通過旁邊的Add按鈕添加到這里。注意這里是JRE,之所以Name中有JDK,是因為這個JRE是JDK附帶的,不是獨立安裝的。JRE可以隨便你裝多少,但JDK一個就夠了。
每個JRE前面都有一個復選框,雖說是復選框,但只能有一個被選中,而被選中的就會作為默認JRE。
所以,Use default JRE的作用,就是在你建立工程時,如果選中,就將這個默認JRE作為你構建用的JRE。就像我最開始的那張圖上一樣,並給出了提示“currently 'jdk1.7.0_71'”。
2.然后是Use project specific JRE:
其實這個選項跟Use default JRE是互補的。之前說道,你可以安裝很多版本的JRE,選擇Use default JRE就會指定默認JRE為你構建用的JRE,但如果你想選擇其它你所安裝的JRE的話,就可以選中這個Use project specific JRE,在其后的下拉菜單中,你就可以選擇你想使用的JRE。
同時,compiler compliance也會被設置為對應JRE版本的編譯級別。
3.最后是Use an execution environment JRE:
這個選項是最令人糾結的。你點開其后的下拉菜單,會看到這樣一幕。
它提供了eclipse支持的所有運行環境選項(只是選項而已)。
按照官方的解釋,選中該選項,你的compiler compliance將會被設置為對應你所選的JRE版本。
比如,我電腦上只有JRE1.7,如果我選中Use an execution environment JRE,並選擇了“JavaSE-1.6”,那么就會有這樣的提示。
即是說,默認的compiler compliance編譯級別為1.7,即我的JDK的JRE版本,新的工程將會被指定為1.6的編譯級別。
這樣看起來好像跟我之前講的自定義compiler compliance如出一轍,而且好像解決了那個需要對應低版本的JRE的警告問題。
但是,當你建立完工程,會看到Problems視圖里有一個警告。
嗯,沒錯,你仍然需要安裝對應版本的JRE才行。
不過,你寫個“Hello World!”還是可以運行的。但是最Perfect match的選擇是裝一個對應版本的JRE,這里的Perfect match,出自這里。
這里就是設置那一堆JRE選項的兼容JRE。如果你安裝了多個版本的JRE,在右邊的Compatible JREs列表里,會列出左邊Execution Environment對應的兼容JRE。
我裝過1.7和1.8版本的JDK,自然有對應版本的JRE,高版本兼容低版本,所以所有的列表中都有這兩個選項。但對於JavaSE-1.7來說,最Perfect match的當然是對應自己版本的JRE。而且他版本,除非你也安裝了對應的JRE,否則找不到那個Perfect match JRE。
同時,如果你想指定Execution Environment中某個JRE的默認兼容JRE,那就在右邊的那個JRE前面勾選復選框。
所以,總結一下,就是:
1.如果電腦中只有一個版本的JRE,因為你是初學者,初級開發者,或者你的開發只需用一個版本的JRE,那么你就選Use default JRE:就可以了。因為你的eclipse的啟動使用就是這個JRE,它會把這個JRE配置為默認的JRE,而通常情況下這個JRE就是你JDK中的JRE,一切都是這么順理成章。
2.如果電腦中有多個版本的JRE,就可以使用Use project specific JRE:來選擇你想使用JRE。這個時候因為你的JDK和JRE的版本可能不對應了,所以compiler compliance會被調整為你所選的JRE的版本。
3.至於Use an execution environment JRE:這個選項,如果你要選的版本的JRE已經安裝了,那么你就可以安心的選擇了。否則你一定逃不過這個警告
其實Use project specific JRE:和Use an execution environment JRE:這兩個選項都是幫助你選擇不同的JRE,前者是讓你從已有的JRE中選擇,所以你有什么他就給你提供什么,比較靠譜;而后者是讓你從他可以提供的JRE中選擇,他可以提供什么,你就可以選什么,但選完之后你有沒有對應JRE那就是另一回事了。
最后再說一點。我之前裝過1.7和1.8版本的JDK,所以有兩個版本的JRE。但問題是我用的eclipse最高支持到1.7版本的JRE,所以就算我用1.8的JRE來創建工程,他的compiler compliance也最高能調整到1.7,1.8中的新特性是用不了的。所以1.8就只能卸了,等以后用新的eclipse來支持1.8吧(網上有教程裝插件可以支持1.8,不想折騰了:-P)。