36

Maven 编译器插件文档状态

Compiler Plugin 用于编译项目的源代码。从 3.0 开始,默认编译器是 javax.tools.JavaCompiler(如果您使用的是 java 1.6),用于编译 Java 源代码。如果要强制使用 javac 插件,则必须配置插件选项forceJavacCompilerUse

事实上,当forceJavacCompilerUse我们的构建中没有指定时,会有一些构建错误,例如当代码引用com.sun.包时(遗留,我们知道这是一个坏主意......)

这两种编译模式一般与 Maven 之间有什么其他区别?是否有任何应该知道的输出差异?

4

1 回答 1

20

javac(作为“java编译器”)是一个可执行文件,理论上它甚至可以是一个依赖于平台的可执行文件或脚本。这被称为将 a 编译.java为 a .class

在 windows 上是它的名字javac.exe,它通常在下面的某个地方C:\Program Files*\jdk*\bin

这个编译器也是用java开发的。这意味着,如果我们启动这个 .exe,需要启动一个新的 java 虚拟机来运行它。这很慢。

但是,因为它是用 Java 编写的,所以有一个更快的替代方案:从我们已经运行的 jvm 中,我们只是import它的主类(fejavax.tools.JavaCompiler或此类)并调用它。这不需要启动不需要的 jvm。这就是 Maven 所做的。仅仅 10 年就足以让他们正确地做到这一点。:-)

当然,它也有一些退路。最可能的原因是,在内部编译器的情况下,它需要从相同的 jvm 和与 maven 核心相同的命名空间中运行。同样指定一个备用 jvm 是不可能的,并且命名空间冲突也可能会产生一些副作用。但它们的可能性很小,因为它们都是精心设计的软件。

于 2013-11-26T13:48:10.217 回答