目录
C 为不同项目选择不同的编译器版本 : Project Facets和Java Compiler
问:jvm是对物理计算机的抽象模拟吗? 是也不是,看你从那个角度看。
简单介绍:
其实写这篇文章的出发点就是因为在Eclipse中用maven时,被各种jre、jdk搞得混乱,于是决定弄清楚。先简单的介绍一下:
Eclipse:是一款集成开发的IDE,可以开发,编译,调试,运行代码等;
JDK:java开发工具包==JRE+java开发工具,开发工具里的javac.exe能将.java文件编译成字节码文件;
JRE:java运行时环境,执行编译后的字节码文件;
Maven:一款项目管理工具;
Eclipse中其实内嵌了Java编译器,其编译器的作用等同于jdk中的javac.exe,所以eclipse其实只需要jre就可以编译&运行java文件(在eclipse中当你保存一个java类时,它就会自动编译这个java类,相当于在命令行中用了javac这个命令)。就像是启动Tomcat只需要jre,原因是Tomcat中已经包括了源代码编译器,不需要jdk中的javac来编译。
但如果你在eclipse中用了maven这样的工具,可能就无法编译了。因为maven默认使用jdk中的javac来编译项目的,而如果你的eclipse中某maven项目只指定了jre,就会出现无法编译的情况,所以需要在pom.xml里配置java编译器或jdk插件才行。
所以Installed JRE这里引入JRE才是最标准的做法(推荐),只是有些人习惯直接引入jdk当然也没关系,毕竟你以为是引入jdk,但人家eclispe却会帮你只引入JDK下JRE里的jar包,不信看图1-1:
所以eclipse中用了maven这样的工具,就无法使用eclipse自带编译器进行编译了。因为maven是默认使用JDK中的javac.exe编译器工具来编译的,它不会使用eclipse自带的编译器进行编译。所以maven项目的pom.xml里还要带上编译器或jdk插件,如块1-1所示。
图 1-1
块 1-1
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
........
Eclipse中有几处会用到jdk和jre的,下面列出几个具体讲解:这里以普通web项目举例:
A 为工作空间设置编译器版本 : 无用
Window ->preferences->java->compiler。
Compiler compliance level是编译器遵从级别的意思,暂时这个设置没有发现有什么用处。因为我们都会针对单个项目再进行编译器版本设置的。
B 为工作空间引入JRE:
Window->preferences->Java->Installed JREs 。
运行时能供选择的JRE,这里就是引入一下你电脑上的jre,具体项目使用什么版本编译还是需要你在项目build path那里配置哦。这里默认不默认勾选的没什么意义,反正我