所以我得到- 警告:[options] bootstrap class path not set with -source 1.6
我要问 3 个关于它的问题。我知道我需要设置引导类路径,但我不确定我是否理解。一个快速的 google 刚刚将我发送到引用 Oracle 页面的页面,但我阅读了 Oracle 页面,并没有觉得我理解得特别好。
我目前正在 Netbeans 上运行此代码,所以我只需点击播放按钮即可编译和运行。是否有一个属性指示它将如何编译,以便我可以添加到引导类路径中?
另外,对于即将到来的可能性,我将只在 Netbeans 上运行它并从命令行运行它,在那里使用引导类路径进行编译的正确方法是什么?他们说 $ javac -source 6 HelloWorld.java
但只是说 -source 1.6
真的是解决方案吗?
也许还有一个更大的问题,我以后如何避免这种类型的警告?如果我了解一点,我引用的是旧的 java 源代码,因此是旧的方法。我不确定那是如何或何时发生的。
最佳答案
您正在进行交叉编译。您正在使用 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 进行编译。
关于java - 未设置引导类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15882586/