修改后的答案
假设:NetBeans 版本 6.9.1(尽管可能适用于大多数或所有 6.x 版本),不使用替代构建系统(例如,Maven)...使用默认值 (Ant)。
默认情况下,NetBeans 使用Ant作为其构建系统来执行诸如编译项目、构建项目、从项目中清除构建文件等操作。Ant 有两个适用于此的概念:目标和任务。在Ant 的词汇中,目标只是一个“命令”或一系列需要为特定工作完成的工作。在 NetBeans 中,常见的目标是“编译”、“构建”、“清理和构建”等。目标完成的“作业”是(除其他外)Ant任务。在 NetBeans 中,一项任务(与回答这个问题特别相关)是Javac Task。这是 Ant 用来将文件编译.java
成.class
文件的任务。
基于 Ant 的项目,因此也是 NetBeans 项目,使用该文件build.xml
来控制构建过程并告诉 Ant 如何完成目标。在 NetBeans 项目中,build.xml
默认情况下位于项目的根目录中。但是,NetBeans 使用用户可扩展build.xml
文件。NetBeans 定义的核心目标和任务实际上位于nbprojects/build-impl.xml
并导入到build.xml
文件的前几行中。理论上,用户可以添加或覆盖其中的内容,而核心 NetBeans 定义的配置在文件build.xml
中保持不变。build-impl.xml
如果您查看nbproject/build-impl.xml
NetBeans Java 项目的默认文件,您会发现 Javac 任务被引用了两次。(搜索“ <javac
”。)两者都在宏定义中,因此深入到 NetBean 的默认构建配置的复杂性中。如果我们参考Javac 任务文档,我们会发现任务在由全局build.compiler
属性、任务compiler
指定的属性<javac... />
或运行时使用的默认 Java 编译器指定的位置使用编译器,并且因此运行 NetBeans 时使用的那个(因为它是触发 Ant 进程的原因)。由于我们在任何地方都看不到build.compiler
或compiler
属性(默认build-impl.xml
),那么我们只能得出正在使用默认值的结论。
所以在这里我们有(或多或少正确的)第一个答案。NetBeans 使用默认情况下用于执行 NetBeans 的 JDK 进行编译。看起来它实际上比那个简单的答案要复杂一些,但它基本上是正确的。如果您查看 Javac Task 的文档,它暗指“实现 CompilerAdapter 接口的类”,这表明 Ant(以及因此 NetBeans)不是直接调用 javac 可执行文件,而是使用编译器类进行编译(总之可能,javac 可执行文件也使用)。请参阅下面的原始答案以确定用于运行 NetBeans 的 JDK。
那么,如果您不想使用用于运行 NetBeans 的默认 JDK 怎么办?这就是“ Java 平台”进来。转到“工具”菜单,然后单击“Java 平台”。您可能在这里只定义了一个平台。(顺便说一句,这实际上是对默认使用 JDK 的最正确答案......一个在 Java 平台管理器中定义的版本。)如果您想针对另一个 Java 版本进行编译(假设您的默认 JDK 是 1.6,但您想针对 1.5 进行编译),那么您可以在系统的某个位置安装备用 JDK,然后在 NetBeans 的 Java 平台管理器中配置平台。(我将把它作为练习留给您查找有关如何添加 Java 平台的文档。对 wiki 的肤浅搜索并没有发现任何明显的东西。在任何案例,这是相当不言自明的。)
在管理器中创建新平台后,您将在“项目”选项卡中右键单击您的项目,单击“属性”,然后单击“库”。在顶部,您将为项目选择适当的 Java 平台。一旦您更改此值并单击“确定”,NetBeans 就会对您的build-impl.xml
文件进行一些调整,将其指向要编译的新 JDK。(对于我们当中真正的极客来说,nbproject
在进行此更改之前制作目录的副本以及在进行更改后diff
针对目录的新内容制作副本是有指导意义nbproject
的。)这些更改指示 Javac Ant 任务使用(等效的) javac 指定平台的可执行文件。所以这里我们有最正确的答案:在项目的Java 平台中指定的 javac 可执行文件(由 Ant javac 任务调用),位于项目属性的库节点下。
原始答案
NetBeans 使用的 JDK 的路径可以在该netbeans.conf
文件中找到。寻找netbeans_jdkhome
入口。
您还可以在运行时指定 jdkhome(给出 *NIX 示例):
netbeans --jdkhome /usr/bin/jdk1.6.0_22
该netbeans.conf
文件位于不同的位置,具体取决于您使用的操作系统。有关查找文件的帮助,请参阅NetBeans wiki 上的NetBeans.conf 常见问题解答。
一些额外的评论......
...您可以在项目属性中指定 -target 选项。在 NetBeans 6.9 中,右键单击该项目,然后选择 Properties。单击编译节点。将您的 -target 添加到Additional Compiler Options。
...我在一些地方读到,指定目标并不能保证代码将在版本低于构建它的 JDK 的 JRE 上运行。换句话说,建议似乎是如果您想要 1.5 二进制文件,则使用 1.5 JDK 进行编译。