使用javac和javax.tools.JavaCompiler有什么区别



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是不可能的,而且名称空间冲突也可能产生一些副作用。但它们是非常不可能的,因为它们都是精心设计的软件。

相关内容

  • 没有找到相关文章

最新更新