gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:59:01 28 4
gpt4 key购买 nike

Maven 编译器插件文档 states :

The Compiler Plugin is used to compile the sources of your project. Since 3.0, the default compiler is javax.tools.JavaCompiler (if you are using java 1.6) and is used to compile Java sources. If you want to force the plugin using javac, you must configure the plugin option 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 年就足以让他们正确地做到这一点。 :-)

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

关于java - 使用 javac 和 javax.tools.JavaCompiler 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com