目录

简单介绍:

A  为工作空间设置编译器版本 : 无用

B  为工作空间引入JRE:

C 为不同项目选择不同的编译器版本 :  Project Facets和Java Compiler

D  为不同的项目选择不同的运行环境JRE

要让项目的运行环境版本要等于或高于项目的编译版本:

E 拓展问答

问:maven项目报编译器不匹配的错误该怎么搞

问:JDK和JRE的区别

问:操作系统配置jdk的环境变量有什么用?

问:jdk里的jre与外面jre的区别

问:jvm是对物理计算机的抽象模拟吗? 是也不是,看你从那个角度看。

问:maven的作用有哪些:

拓展:Eclipse的Project Facets属性

拓展:JDK中的开发工具到底有哪些呢:




简单介绍:

其实写这篇文章的出发点就是因为在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那里配置哦。这里默认不默认勾选的没什么意义,反正我们在单个项目那里配置 的时候也是再选择。

C 为不同项目选择不同的编译器版本 :  Project Facets和Java Compiler

选中项目右键——properties——Project Facets和Java Compiler。

Project Facets  需要我们为当前项目选择合适的项目特性。

Java Compiler   需要我们为当前项目选择合适的编译器版本。

(Project Facets直译是项目面的意思,在eclipse应该翻译成项目特性。当我们新建一个项目的时候,这里就会生成此项目的特性。)

图 C-1  Project Facets

图 C-2  Java Compiler

D  为不同的项目选择不同的运行环境JRE

右击项目名称->build path->configure build path,选择libraries选项卡,选中jre:这里是指自己项目运行时需要使用的JRE的jar包。

要让项目的运行环境版本要等于或高于项目的编译版本:

为单个项目设置编译器版本和运行版本的时候需要注意,要让项目的运行环境版本要等于或高于项目的编译版本,这是因为高版本中的有些功能在低版本中并不提供,例如,项目中用了泛型,编译时为jdk1.5但运行时为jdk1.4,虽然编译时不报错,但运行时就会出错,因为jdk1.4并不支持泛型;反过来,编译时为jdk1.4而运行时为jdk1.5,虽然编译时报错,但却可以正确运行。

E 拓展问答

问:maven项目报编译器不匹配的错误该怎么搞

Eclipse的Problems小窗口会提示一个错误:Java compiler level does not match the version of the installed Java project facet.该怎么改呢?

翻译Java编译器级别与项目特性中的编译器版本不匹配。

我们知道,maven项目不使用eclipse自带的编译器,而是在pom.xml里面导入一个编译器插件,所以我们要让 java Facets里的编译器版本保持和pom.xml里编译器插件版本一致,以期让eclipse提供对pom里面编译器插件的支持。

问: JVM、JRE、JDK之间的区别与联系

JVM(Java Virtual Machine),Java虚拟机

JRE(Java Runtime Environment),Java运行时环境,包含了JVM和Java的核心类库(Java API)。JRE是提供给用户运行java程序使用的,它是java程序运行所需要的软件环境。

JDK(Java Development Kit)称为Java开发工具箱,包含了JRE和一系列开发工具。 JDK是提供给java程序员编写java程序使用的。开发工具中有编译器javac.exe, 还有性能监控分析工具javajconsole.exe和jvisualvm.exe、打包工具jar.exe 、汇编分析工具javap.exe、生成帮助文档工具javadoc.exe、GUI启动程序javaw.exe、程序调试工具jdb.exe等等开发工具。

问:操作系统配置jdk的环境变量有什么用?

首先要理解配置Windows平台的环境变量的效果:计算机执行某个命令时,如果系统无法在当前文件夹里找到对应的.exe,那么系统就会去path下挨个找看是否能找到对应的.exe,一旦找到第一个对应的.exe就运行命令,其他的路径下就不找了。如果找不到你就会看到“系统找不到某某命令”的提示。

所以,配置jdk的环境变量是为了 在任何目录下有用到java相关命令或相关工具时,都能找到并使用对应的.exe。使用场景如下:

  • 你在任何目录下进入dos窗口都能使用java相关命令,如javac.exe编译命令。

  • eclispe是纯java语言开发的,所以运行需要JRE环境,它自己目录下又没有对应的jre,所以要启动eclipse需要有jre的环境变量。(目前已知eclipse4.6的启动要求使用jre8及其以上,eclipse4.20插件目录下自带了jre16,所以不必须jre的环境变量了)

  • 同理。tomcate也是纯java开发的,运行需要jre环境。(tomcat的启动也会要求jre的最低版本,但一般不会碰到这种问题)

问:jdk里的jre与外面jre的区别

分析:安装了JDK,那么我们的电脑中将会有C:\Program Files (x86)\Java\jdk1.8.0_05文件夹 ,这个文件夹里面有一个jre文件夹。然后我们选择继续安装(会安装外部jre),此时我们的电脑中有C:\Program Files (x86)\Java\jre8文件夹。

通过对比jre和jre8文件夹中的东西,我们发现基本是一样的,那么这俩文件夹到底有啥区别呢?

我们暂且称呼jre为自带内部jre,jre8为外部jre。

内部jre与外部jre的主要区别在于vm执行选项有区别:

外部jre中,在其client文件夹里面,有个jvm.dll;内部jre中,在其server文件夹里面,也有个jvm.dll,主要是两个jvm的区别,使得内外部jre有不同的分工,并且能在各自的分工上做到最好(提高各自的效率和性能)。这两个jvm.dll使用不同的jvm虚拟机,其中内部jre中的server vm启动时间较长,占用内存较多,但是启动后执行性能更高,适合开发。

换句话说:

如果你是一个普通用户,那么你只用到公共jre足够,把jdk删除吧。

如果你是一个java开发者,你本身就是需要使用jdk,况且jdk-jre的vm选项更适合开发。

问:jvm是对物理计算机的抽象模拟吗? 是也不是,看你从那个角度看。

就像是C程序员直接面对操作系统来进行内存管理一样,java程序员是面对JVM进行内存管理,所以你可以认为它是虚拟机。

一次编写,到处运行,就是JVM的功劳。相同的class文件经过不同平台上虚拟机的编译(解释)会产生适应与不同平台的汇编(或者机器语言)。站在这个角度看,它就是个编译器。此外,在传统虚拟机上我们可以做任何真实系统上可以做的事,但JVM不是。

作者:jack.wu
链接:https://www.zhihu.com/question/278941891/answer/407564359
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先给出答案:完全不是!以下是本人的观点:
1、如果你说JVM是对操作系统的抽象,我会说:站在特定的角度它的确是,因为它做了些资源管理、调度方面的工作,也像操作系统一样为我们屏蔽了底层的细节。
2、JVM也并不是我们传统意义上的虚拟机(VM)。当我们使用一个虚拟机的时候例如VMvare,此时如果不告诉我们在虚拟机中,我们很难发现我们面对的是虚拟机。因为它是对计算机架构的完全抽象模拟,我们可以创建进程、分配内存、分配磁盘,在虚拟机上可以做任何真实操作系统上可以做的事。JVM不是。
3、JVM本质上就是操作系统中的一个进程,进程是分配资源的最小单位,所以我们为JVM分配内存,跑在JVM中的程序都要受制与这个约束。我们在 JAVA开发时,说过多线程,但确实没有多进程,因为JVM本身就是一个进程。它创建的所有线程都共享JVM的资源。站在这个角度上看,JVM是比操作系统高一层次的抽象,我们开发程序都不用像C、C++那样直接和操作系统打交道,直接面对JVM就行了。站在这个特点的角度来看,我们面对的JVM就像C、C++程序员面对的操作系统一样。为了规范开发所以出现了JVM规范,以及JMM(内存管理)规范。
4、一次编写,到处运行,就是JVM的功劳。相同的class文件经过不同平台上虚拟机的编译(解释)会产生适应与不同平台的汇编(或者机器语言)。站在这个角度看,它仿佛是一个编译器。
5、再来说收堆栈,这里所说的堆栈绝对不是数据结构中的堆结构或者栈结构,当然一块内存条也不会分为堆区栈区,他其实是站在程序开发的角度对内存区域进行的划分,是虚拟的。所以我们可以说:JVM中所说的堆栈、和C程序员眼中的堆栈不是同一个东西,但是是同一类东西——都是为了规范开发而指定的一系列内存分配规范。不一样的区域有着不一样的用途、不一样的特性。任何语言都离不开内存的分配管理,任何语言都会对内存分区。叫堆区栈区,A区B区都一样,java只是恰巧沿用了C的叫法。堆区栈区离开了程序开发内存分配是毫无意义的。综上:JVM肯定不是计算机的抽象,当然也不是操作系统、不是虚拟机、不是编译器,但是站在特定角度来看可能与这个三个东西存在共性。所以JVM就是java虚拟机,我就是我,不一样的烟火~PS:题主应该是新人,接触多了你就自然懂了。

问:maven的作用有哪些:

作用一:

maven主要是用来解决导入java类依赖的jar,编译java项目主要问题。(最早手动导入jar,使用Ant之类的编译java项目)

以pom.xml文件中dependency属性管理依赖的jar包,而jar包包含class文件和一些必要的资源文件。当然它可以构建项目,管理依赖,生成一些简单的单元测试报告。

作用二:

比如之前项目导入jar。是通过copy方式导入项目中,而且还会存在jar之间的依赖和冲突。而maven解决了这些问题,只是网速不好的时候有点烦。使用私服nexus解决这个问题。

作用三:

jar 包管理,防止jar之间依赖起冲突 。小组之间建立个私服务,大家都用通用 的maven配置文件,不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。

作用四:

Maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven能够很方便的帮你管理项目报告,生成站点,管理jar文件,等等。例如:项目开发中第三方jar引用的问题,开发过程中合作成员引用的jar版本可能不同,还有可能重复引用相同jar的不同版本,使用maven关联jar就可以配置引用jar的版本,避免冲突。

拓展:Eclipse的Project Facets属性

拓展:JDK中的开发工具到底有哪些呢:

Eclipse中自带的编译器和引入的JRE(JDK)的关系相关推荐

  1. eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...

    这几天用Eclipse+mysql+java编写了一个班级信息管理的软件.在Eclipse里运行没有问题所有功能都没有问题,但无论用Eclipse中自带的export生成可执行的jar包,还是用fat ...

  2. myEclipse中的web项目直接引入到eclipse中运行

    将myeclipse中开发的动态web项目直接引入到eclipse中继续开发,启动tomcat时会发出警告,更重的问题是你想启动的项目不知哪里去了,没有读取到配置文件:       警告: [SetP ...

  3. Java SE Eclipse中引入第三方jar及class

    使用eclipse开发Java SE 总免不了需要引入第三方的jar或者calss文件.这里给大家说一下如何在eclipse中引入第三方jar或者calss文件. 让我们先了解一下eclipse项目中 ...

  4. Eclipse中实现SpringBoot与Mybatis整合(图文教程带源码)

    场景 数据库中数据 实现效果 项目结构 前面参照 Eclipse中新建SpringBoot项目并输出HelloWorld https://blog.csdn.net/BADAO_LIUMANG_QIZ ...

  5. 在eclipse中引入jquery.js文件报错的解决方案

    从官方下载的jquery.js在myeclipse始终用个大大的红叉,看着很不爽,如何解决呢:jquery.js在myeclipse中报错:jquery.js -> 鼠标右键 -> MyE ...

  6. Eclipse中查看没有源码的Class文件的方法

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常 ...

  7. 如何在eclipse中使用XYLayout布局?在此介绍如何把XYLayout导入到eclipse .

    XYLayout布局是jbuilder中自带的布局,它存在于jbcl.jar包中 ,而jbcl.jar包在JBuilder安装目录的lib目录下.它是每个控件按(x,y)坐标安排位置的布局.属于Bor ...

  8. IntelliJ中可能的东西在Eclipse中是不可能的?

    本文翻译自:Things possible in IntelliJ that aren't possible in Eclipse? I have heard from people who have ...

  9. eclipse编辑器怎么加入c语言,如何在eclipse中配置进行C语言开发。

    引言:windows下C的开发工具很多,比如CodeBlocks,Dev-C++,VC6等.CodeBlocks需要依赖编译器MinGW.Dev-C++没有自动提示,使用起来不方便.下面介绍一下ecl ...

最新文章

  1. 使用Python,OpenCV进行Tesseract-OCR绑定及识别
  2. 性能优化:实现动画效果优先考虑css的transition
  3. gitlab常规维护命令
  4. android studio 代码缩略图,android studio 设置模板
  5. numpypandas补充常用示例
  6. ES6新增数据类型符号(2):共享符号与知名符号
  7. 【转】刨根究底字符编码之十三——UTF-16编码方式
  8. pandas 处理 csv
  9. leetCode----day01---- 从排序数组中删除重复项
  10. BootStrap:基础学习
  11. DIV向上滚动(类似新闻)
  12. 详解傅里叶变换与拉普拉斯,Z变化的联系
  13. WIN10安装cad2006提示无权限安装的解决办法
  14. 一文读懂Elephant Swap的LaaS方案的优势之处
  15. 联合国会常务委员会明确破产法规:Arun Jaitley
  16. 最简单的ESP8266的Wifi智能小车车教程
  17. 更改分类算法的阙值的资料
  18. Parameter index out of range (1 > number of parameters, which is 0)
  19. 顺丰快递单号批量提取
  20. mysql 备份多个库_使用mysqldump备份多个库

热门文章

  1. 算法提高(VIP)——贪吃的大嘴
  2. Kaggle座头鲸识别top5解决方案
  3. Redis数据库的订阅发布
  4. 带小孩成都到昆明暑假三日游攻略
  5. 网络安全管理员_三级_操作技能考核解题过程
  6. linux操作系统诞生于哪一年,Linux操作系统已经诞生24周年
  7. php 7.0.27下载,最新PHP7 For Windows下载7.0.3 正式版下载地址电脑版-锐品软件
  8. 一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系
  9. 基于8051单片机实现电子时钟+数字秒表设计
  10. java输出语句_java输入输出语句是什么