javac和Eclipse编译器有什么区别?

Eclipse的Java编译器只是javac程序包装的同一个核心的一个包装,还是一个单独的编译器? 如果是后者,他们为什么要重新发明轮子?

Eclipse已经实现了自己的编译器,叫做Eclipse Eclipse编译器 (ECJ)。

它与Sun JDK附带的编译器javac不同。 一个显着的区别是Eclipse编译器可以让你运行实际上没有正确编译的代码。 如果错误代码块从未运行,您的程序将运行正常。 否则,它会抛出一个exception,指示你试图运行不能编译的代码。

另一个区别是,Eclipse编译器允许从Eclipse IDE内部进行增量构build,也就是说,只要完成键入,就可以编译所有代码。

Eclipse带有自己编译器的事实也很明显,因为您可以在Eclipse中编写,编译和运行Java代码,而无需安装Java SDK。

ECJ优先于javac的几个例子是:

  • Apache Tomcat使用ECJ来编译JSP,
  • IntelliJ IDEA支持ECJ,从GNU Compiler for Java (GCJ)4.3开始,
  • GCJ集成了ECJ,
  • Liferay与ECJ一起构build。

每个人都已经解释说他们是不同的。 这两个编译器之间的行为有些不同。 他们都归结为(至less)其中一个实现的错误。

编译时优化相关

  • Eclipse错误? 仅在默认情况下打开空值

genericstypes推理相关

  • generics编译并在Eclipse中运行,但不在javac中编译
  • 编译器与generics方法的空参数行为不同

Eclipse的内置编译器基于IBM的Jikes java编译器 。 (请注意,Eclipse也是在IBM开始的)。 它完全独立于JDK中Sun的Java编译器; 它不是Sun的javac的封装。

Jikes已经存在了很长一段时间,它比标准的JDK Java编译器要快很多(但我不知道这是否正确)。 至于IBM为什么要编写自己的Java编译器:也许是因为许可原因(他们也有自己的Java实现)。

这是一个单独的编译器。 这是需要的,因为javac不允许从eclipse站点编译稍微损坏的代码

增量Java编译器。 作为一个Eclipse构build器实现,它基于VisualAge for Java编译器演变而来的技术。 特别是,它允许运行和debugging仍然包含未解决错误的代码。