未设置引导类路径

2022-09-01 15:34:37

所以我得到 -warning: [options] bootstrap class path not set in conjunction with -source 1.6

我即将问3个关于它的问题。我知道我需要设置引导类路径,但我不确定我是否理解如何。一个快速的谷歌只是把我发送到引用Oracle页面的页面,但我读了Oracle页面,并不觉得我特别理解它。

我目前正在 Netbeans 上运行此代码,因此我所要做的就是点击播放按钮,以便对其进行编译和运行。是否有一个属性指示这将如何编译,以便我可以添加引导类路径?

另外,对于即将到来的可能性,我将取消它仅在Netbeans上运行并从命令行运行它,那么使用那里的bootstrap类路径进行编译的正确方法是什么?他们说,但只是说真的会是解决方案吗?$ javac -source 6 HelloWorld.java-source 1.6

也许一个更大的问题是,我将来如何避免这种类型的警告?如果我理解了哪怕一点点,我引用的是一个旧的java源代码,因此是较旧的方法。我不知道这是如何或何时发生的。


答案 1

您正在执行交叉编译。您正在使用 JDK 7 编译器来编译 JDK 6 的类。这没关系,但是为了避免问题,编译器希望获得 JDK 6 。这背后的原因是,您实际上可能会生成不适用于JDK 6的类,因为您可能使用的是旧的语言规则(在本例中为1.6),而是全新的引导类。例如,某些方法可能不存在于较旧的 JDK 中。因此,您可以完成编译,但是一旦运行该程序,它可能会以.rt.jarMethodNotFoundException

几种解决方案,您可以选择一种

  • 从 JDK 6 指定。为什么不使用比甚至更旧的编译器呢?rt.jar
  • 使用 JDK 6 编译器(它已包含)。如果不需要7个功能,为什么还要使用7。rt.jar
  • 忽略警告并具有良好的测试覆盖率,以确保您不使用 Java 7 功能
    • 我不了解NetBeans,但在Eclipse中,你也可以说你是针对JDK 6编译的,所以如果你使用Java 7的功能,它实际上不会编译。
  • 更改业务需求并针对 Java 7 进行编译。

答案 2

我知道我需要设置引导类路径,但我不确定我是否理解如何。

在 Netbeans 8.0.2 中,转到:

Run > Set Project Configuration > Customise...

在“类别”窗口中,转到:

Build > Compiling

底部字段是“其他编译器选项”,您可以向其中添加:

-bootclasspath /your/path/to/lower/java/version/lib/rt.jar