我在Java \ jdk1.8.0_152文件夹中安装了自己的JDK 8。 Eclipse允许我们从Window / Preferences / Java / Compiler中指定Java编译器。如果我指定编译器版本1.8(见下文),Eclipse实际使用哪个编译器,我自己安装的JDK位于Java \ jdk1.8.0_152或Eclipse自己的捆绑JDK?这两个编译器有什么区别?
如果我错了,请纠正我。我的第二个问题是,当我们为Eclipse(Window / Preferences / Java / installed JREs)指定安装的JRE时,我们必须指定我们自己安装的JRE,因为Eclipse不包含任何JRE。我是对的吗?
注意,此问题非偏离主题,因为它不会要求推荐或查找图书,工具,软件库,教程或其他异地资源,而是特定编译器设置的含义。它是否切换编译器,是否将设置委托给JDK编译器(以便在那里找到含义)或者它是否意味着其他东西?要在两台不同的计算机上生成相同的字节码,您需要知道。
答案 0 :(得分:1)
与其他Java IDE相比,Eclipse使用自己用Java编写的增量编译器。它可以显示比AdView
更多的警告和错误。 Eclipse编译器和javac
都实现了Java Language Specification。存在两种编译器产生不同字节码或其中一个字符码失败的极端情况(例如,见this Stack Overflow question)。
Eclipse编译器至少需要一个用于类文件的JRE,例如: G。 javac
。 JDK只是查看源代码,但Eclipse编译器不需要。
到目前为止,Eclipse并未附带JRE(请参阅Eclipse bug 506244)。但是,在Java虚拟机OpenJ9成为Eclipse项目之后,这可能会很快发生变化。
答案 1 :(得分:0)
Eclipse有自己的Java编译器,称为[JDT Core] [1](org.eclipse.jdt.core)。编译器本身包含在org.eclipse.jdt.core插件中。 Eclipse不会使用任何用户安装的JDK。相反,由于以下主要原因,它使用自己的JDT核心来编译Java程序:
主要原因是JDT核心具有增量编译的能力,这意味着它会逐步编译代码中的更改(这也是Eclipse不需要编译按钮的原因,因为它会自动编译当检测到变化时)。但Oracle的JDK不支持增量编译。
Eclipse的JDT核心编译器是否包含JRE?
总之,Eclipse使用自己的JDT核心作为Java编译器。 JDT核心编译器没有JRE。因此Eclipse要求用户安装JRE来运行.class代码。
参考文献:
[1] JDT插件开发人员指南,http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_compile.htm
[2] JDT核心组件,https://www.eclipse.org/jdt/core/
[3] Eclipse如何仅使用JRE编译类? How does Eclipse compile classes with only a JRE?