一:jdk和jre的區別
JDK(java development kit):java開發工具,包含java基礎類庫,java工具(常用指令,java,javac等),運行時環境(jre),面向於開發人員
JRE(Java Runtime Environment):包含jvm(虛擬機)的實現,java核心類庫(rt.jar),面向Java應用程序.
本地安裝jdk之後,能看到jdk內部包含jre以及與jdk同級的外部也有jre,那麼這兩種jre有什麼區別呢?
jdk中的jre主要用於開發人員,代碼寫完了之後測試運行Java程序使用的.外部的jre主要用於運行安裝在本地的java程序.兩者功能基本相同,只是側重點不同,jdk內部的jre運行效率更高,外部的jre運行更穩定
總的來說:jvm在jre中,jre在jdk中
二:eclipse上安裝的jdk及其作用
1 :首先eclipse是java寫的ide工具,它的啓動需要jdk(jre),一般會配置環境變量
2: eclipse上設置jre以及編譯級別
eclipse上開發一個項目主要有2個地方涉及jdk相關配置:java bulid path中的jre和compiler complience level(編譯級別)
jre可以看作運行環境(提供代碼中使用的類庫),編譯級別可以看作編譯環境(提供對代碼的語法檢查)
eclipse編譯源代碼不是使用javac,有自帶的編譯器
那麼以下組合各有什麼結果呢?
- jre > compiler
如果代碼中使用了編譯器無法識別的語法,或者使用了更高級別jdk的特性
例如: jdk設置1.5,編譯級別設置1.4
如果在代碼中使用泛型,編譯器無法識別,編譯報錯
如果在代碼中使用jdk1.8的特性,類庫無法引用,編譯器也無法編譯 - jre < compiler
這種情況是一定會編譯報錯的
高版本的編譯級別編譯的class文件格式在低版本的jre上無法解析 - jre = compiler
這種是推薦的方式,保證jre = compiler = 部署環境jdk
總的來說如果jre > compiler,那麼源代碼不要使用高版本的jdk特性,部署環境jdk >compiler即可.一般jre = compiler = 部署環境jdk
三:maven配置項目的target和source
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
此處:
target:表示部署環境的jdk(jre),編譯版本
source:表示源代碼的編譯環境,即源代碼中可以使用的語言特性
一般而言,target和source保持一致,但爲了兼容低版本的jdk,source可以設置小於target版本(例如:部署環境jdk1.8,開發環境只有1.7,那麼設置source=1.7,target=1.8同樣可以運行,但是source不能高於target,否則編譯失敗)
參考鏈接: