为什么 Eclipse 要使用自己开发的编译器(ECJ) 而不用 Javac?

关注者
84
被浏览
11619
多个因素吧。

首先,Eclipse开始写编译器的时候,javac还不开源,还是Sun JDK里的一个闭源组件。Eclipse如果想用它就只能把它当作外部命令/外部库来用,而不能在源码层面上定制。
而当时的javac在嵌入到IDE里提供各种语言服务(例如语法高亮、自动补全等)的场景支持得并不好,当时它还只是个比较纯粹的编译器。所以它也不适于提供编译代码之外的服务给IDE用。

其次,Eclipse IDE要给Java提供各种方便的功能,要有语法高亮、语法/语义分析和对应的错误提示,要有自动补全,要有Code Model,等等。这些功能都做了的话,其实离一个完整的Java源码->字节码编译器就差一步了——字节码生成。这一步基本上是Java编译器里最简单的一步,所以何乐而不为呢。