Maven编译器插件文档状态:
编译器插件用于编译项目的源代码。从3.0开始,默认编译器是javax.tools.JavaCompiler(如果您使用的是java 1.6),用于编译java源代码。如果您想使用javac强制插件,则必须配置插件选项
forceJavacCompilerUse
事实上,当我们的构建中没有指定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。这就是maven所做的。仅仅10年就足够他们正确地做到这一点了。:-)
当然,它也有一些缺点。最可能的原因是,在内部编译器的情况下,它需要从与maven核心相同的jvm和命名空间中运行。另外,指定一个备用jvm是不可能的,而且名称空间冲突也可能产生一些副作用。但它们是非常不可能的,因为它们都是精心设计的软件。