27

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

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

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

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

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

4

5 回答 5

41

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

几个解决方案,你可以选择一个

  • 从 JDK 6 开始指定rt.jar。为什么不使用比甚至更旧的编译器?
  • 使用 JDK 6 编译器(rt.jar包括在内)。如果不需要 7 个功能,为什么还要使用 7。
  • 忽略警告并具有良好的测试覆盖率,以确保您不使用 Java 7 功能
    • 我不了解 NetBeans,但在 Eclipse 中,您也可以说您正在针对 JDK 6 进行编译,因此如果您使用 Java 7 功能,它实际上不会编译。
  • 更改业务需求并针对 Java 7 进行编译。
于 2013-04-08T15:17:45.747 回答
3

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

在 Netbeans 8.0.2 中,转到:

Run > Set Project Configuration > Customise...

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

Build > Compiling

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

-bootclasspath /your/path/to/lower/java/version/lib/rt.jar
于 2017-11-24T14:26:38.487 回答
2

在 macOS 的控制台上编译时有相同的警告。这里要添加的编译器选项是

-bootclasspath /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar

请注意,在 macOS 上,对于 Java 版本 <= 1.6(Apple 发布的版本),rt.jar称为classes.jar

于 2018-12-07T15:19:24.217 回答
1

在我的情况下,maven 正在使用另一个 java 版本,我通过在 maven 中更改所需的 java 版本来修复它。

于 2020-08-20T06:12:07.850 回答
0

只需右键单击项目属性,然后转到绑定并选择 JDK 1.7,前提是您在 NetBeans 项目中使用它的功能,这就是您遇到问题的原因。这将有助于解决问题并为我工作。

于 2013-06-13T18:57:27.263 回答