Eclipse不使用ECJ编译,切换成javac怎么编译

各款IDE如果自带的话我认为是 jre 而非 jdk题主是不是想问的这个。由于本地没有 Eclipse 和 MyEclipse ,没有再次验证如有错误欢迎指出。


其实不管 IDE 是否自带我是习惯安装特定版本的 JDK 的。除了项目组的版本要求等因素外一些工具(如 maven)要求必须 JDK 为非 JRE。

Java)来实现的这也就解释了为什麼你本地安装的JDK或启动Eclipse是在配置文件中通过-vm参数设置的jdk或新建项目时选择的JDK的版本为1.6时,在这里的编译级别却可以选为1.7或1.8的原因因为所能编译的最高级别跟那些JDK根本没有关系,是由eclipse版本决定的如果你的Eclipse在这个选项里没有你需要的级别,可以尝试着升级高版本来实现

首先在该处添加你需要的JRE,注意此处是添加JRE即可没有必要是JDK(被选中的JRE为Eclipse默认使用的JRE,即在你新建项目时如不特别指定会默认关联该JRE,在运荇该项目时使用该JRE执行),

然后在项目的build path中引用JRE即可如下图:

三、编译与运行版本的关系

编译的级别可以低于运行JRE的版本,但是不能高于JRE的版本大概关系如下:

程序无法运行,通常会报如下错误

ECJ(Eclipse Compiler for Java)就是Eclipse自带的java编译器 公司的項目都是在Eclipse上面做的。自己用了一段时间的Idea觉得很爽准备换过来写,发现公司基盘报错了调查发现是泛型方面的异常。整理如下

公司源码肯定不能放,把问题整理之后关键的几个类的UML类为:

出问题的类之间的UML图

各个类的代码为: 基础类:

一个继承了基础类的类:

以仩代码在Eclipse中会报warning,程序能够编译通过并运行:

但是javac怎么编译是编译不通过的:

公司基盘的代码而且有部分类已经打包为jar,部署在maven仓库中叻要在Idea中编译就需要把Idea的编译器换成Eclipse:

在遇到这个问题之前,我直觉上会觉得这个代码是不符合java语法的应该修改为:

这样修改之后的javac怎么编译和Idea中都能正常编译执行,且不会有Error或Warning

看起来javac怎么编译比ECJ进行了更严格的泛型检查。但是问题不止于此整理问题的过程中想到鉯下问题待思考,记下来以后学习:

  • 项目部署用的Tomcat依赖的也是官方jdk,为什么不会报错呢
  • 多数文章只会介绍泛型的使用,而泛型Class<?>和基础性Class在Java规范里的区别究竟是什么呢

我要回帖

更多关于 javac怎么编译 的文章

 

随机推荐