Maven 编译器插件文档states http://maven.apache.org/plugins/maven-compiler-plugin/:
编译器插件用于编译项目的源代码。从 3.0 开始,默认编译器是 javax.tools.JavaCompiler(如果您使用的是 java 1.6),用于编译 Java 源代码。如果你想强制插件使用javac,你必须配置插件选项forceJavacCompilerUse
确实当forceJavacCompilerUse
在我们的构建中未指定,存在一些构建错误,例如当代码引用com.sun.
包(遗留的,我们知道这是一个坏主意......)
一般而言,这两种编译模式与 Maven 之间还有哪些区别?是否存在任何需要了解的输出差异?
javac(如“java编译器”)是一个可执行文件,理论上甚至可以是依赖于平台的可执行文件或脚本。这被称为编译一个.java
to a .class
.
在windows上是它的名字javac.exe
,它通常在下面的某个地方C:\Program Files*\jdk*\bin
.
这个编译器也是用java开发的。这意味着,如果我们启动这个.exe,就需要启动一个新的java虚拟机来运行它。这很慢。
但是,因为它是用 Java 编写的,所以有一个更快的替代方案:从我们已经运行的 jvm 中,我们只需import
它的主要类别(f.e.javax.tools.JavaCompiler
或类似的)并称之为。这不需要启动不需要的jvm。这就是maven 所做的。他们仅仅用了 10 年就足以正确地做到这一点。 :-)
当然它也有一些缺点。最可能的原因是,对于内部编译器,它需要从与 Maven 核心相同的 jvm 和相同的命名空间中运行。另外,指定备用 jvm 也是不可能的,并且命名空间冲突也可能会产生一些副作用。但它们的可能性很小,因为它们都是设计良好的软件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)