Maven编译器插件文档states:
确实,当在我们的构建中未指定forceJavacCompilerUse
时,会出现一些构建错误,例如,当代码引用com.sun.
包时(遗留问题,我们知道这是一个坏主意...)
总体而言,这两种编译方式以及与maven相比,这两种编译方式还有什么不同?是否应该知道任何输出差异?
最佳答案
javac(作为“java编译器”)是一个可执行文件,理论上它甚至可以是依赖于平台的可执行文件或脚本。这被称为将.java
编译为.class
。
在Windows上,其名称为javac.exe
,通常在C:\Program Files*\jdk*\bin
下方。
该编译器也是用Java开发的。这意味着,如果我们启动此.exe,则需要启动一个新的Java虚拟机来运行它。太慢了
但是,由于它是用Java编写的,因此有一个更快的替代方法:从我们已经运行的jvm中,我们只需对其主类import
(例如javax.tools.JavaCompiler
或类似名称)进行调用。这不需要启动不需要的jvm。那就是行家所做的。仅仅10年,他们就足以正确做到这一点。 :-)
当然,它也有一些后备功能。最可能的原因是,对于内部编译器,它需要从与maven核心相同的jvm和相同的 namespace 中运行。另外,不可能指定备用的jvm,并且命名空间冲突也可能会带来一些副作用。但是它们非常不可能,因为它们都是设计良好的软件。