java编译器有哪些:日常开发够用的主流编译工具实测体验

java编译器有哪些:日常开发够用的主流编译工具实测体验

初学Java那会,最头疼的不是写代码,而是分不清各类工具,搞不懂java编译器有哪些,每次编译运行代码都频频出错,白白浪费大把时间。那时候总以为编译器只有自带的一种,直到反复踩坑实测后,才摸清了日常开发、学习能用的所有主流Java编译器,每一种的适配场景和优缺点都实打实体验过。

最先接触的就是JDK自带的javac,这是所有Java开发的基础编译器,没有任何花哨功能,纯粹的命令行编译工具。刚学编程的时候,全程用记事本写代码,然后打开cmd窗口输入编译指令,最开始经常输错命令,要么文件路径不对,要么类名和文件名不统一,导致编译失败。折腾好久才搞明白,javac是原生官方编译器,兼容性拉满,所有标准Java语法都能完美解析,而且不依赖任何IDE,只要安装了JDK就能直接使用。唯一的缺点就是太原始,没有代码提示、错误预警,所有语法错误都要编译之后才能发现,效率极低,只适合新手入门练手,企业开发基本不会单独用它。

后来上手IDEA,才发现IDE自带的编译器和javac完全不是一回事。IDEA内置的Javac编译器做了轻量化优化,编译速度比原生javac快很多。刚开始不知道这个区别,写完代码手动用cmd编译报错,但是IDE里直接就能运行,一度以为是软件出了bug。反复测试后才看清,IDE的编译器会做增量编译,只编译修改过的代码文件,不会每次都全局编译,小型项目的编译耗时几乎可以忽略不计。不过它有个很明显的短板,对部分高阶Java语法、新版本特性的适配会滞后,偶尔会出现IDE编译正常,打包部署时用原生javac报错的情况,新手很容易在这里翻车。

工作之后接触项目打包,第一次用到了Eclipse Compiler for Java,也就是ECJ编译器。当时接手一个老旧的开源项目,用原生javac打包一直报错,切换成ECJ之后直接顺利编译通过。后来才了解到,ECJ是Eclipse专属的编译器,独立性很强,不用依赖完整JDK环境,容错性特别高。很多不规范的写法、轻微的语法瑕疵,原生javac会直接终止编译报错,ECJ却可以正常编译运行,这也是很多Eclipse用户写代码随便一点也能跑通的原因。但也正是因为容错性太高,会掩盖很多代码语法问题,长期用它开发,很容易养成不规范的编码习惯,后期对接其他编译器时会批量出问题。

接触大型微服务项目后,频繁用到Gradle和Maven内置的编译插件,才发现这也是一类常用的Java编译工具。最开始一直误以为Maven只是打包工具,不负责编译,实际实操后才纠正认知。Maven默认绑定的还是原生javac,但可以手动切换适配ECJ等编译器,它的核心优势是适配工程化项目,能统一项目编译规范、依赖版本,多人协作开发时,不会出现本地编译和服务器编译环境不一致的问题。之前团队出现过本地代码能跑,服务器部署失败的问题,最后排查就是本地用IDE编译器,服务器用原生javac,规范不统一导致的。

还有一个小众但实用的编译器JDT,很多新手基本没接触过。它属于轻量化编译工具,主打快速语法检测和即时编译,很多代码检测工具、在线Java运行平台都是基于它开发的。试过用在线编程网站写代码,秒编译秒运行,就是依托JDT的轻量化特性,它舍弃了部分复杂的编译校验,极致提升编译速度,只适合代码测试、片段运行,完全不适合正式项目开发。

这么多编译器用下来,没有绝对最好的选择,只有适配场景的区别。新手入门练基础,原生javac足够用;日常开发写业务代码,IDE内置编译器效率最高;老旧项目、特殊语法适配,ECJ更兼容;企业团队项目打包部署,Maven、Gradle的编译体系是唯一靠谱的选择。

电脑桌面上至今还留着当初第一次编译报错的代码文件,文件名和类名错位的痕迹还在。

了解更多百科知识请访问 百科