一: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,否则编译失败)
参考链接: