所以我得到了 - warning: [options] bootstrap class path not set in conjunction with -source 1.6
我即将问3个问题。我知道我需要设置bootstrap类路径,但我不确定我是怎么理解的。一个快速的谷歌只是把我发送到从Oracle页面引用的页面,但我读了Oracle页面,并没有觉得我特别理解它。
我目前在Netbeans上运行此代码,因此我只需按下播放按钮即可编译并运行。是否有一个属性指示如何编译,以便我可以添加引导类路径?
另外,对于即将发生的事件,我将仅在Netbeans上运行并从命令行运行它,使用bootstrap类路径编译的正确方法是什么?他们说$ javac -source 6 HelloWorld.java
但是只是说-source 1.6
真的是解决方案吗?
或许是一个更大的问题,我将来如何避免这种类型的警告?如果我理解甚至一点点,我引用一个旧的java源代码,因此引用较旧的方法。我不确定这是怎么发生的。
答案 0 :(得分:41)
您正在进行交叉编译。您正在使用JDK 7编译器来编译JDK 6的类。这没关系,但为了避免问题,编译器希望得到JDK 6 rt.jar
。其背后的原因是,您实际上可能会生成不能与JDK 6一起使用的类,因为您可能使用的是旧语言规则(在本例中为1.6),而是使用全新的引导类。例如,旧的JDK中可能不存在某些方法。所以你完成了你的编译,但是一旦你运行程序,它可能会被MethodNotFoundException
。
一些解决方案,你可以选择一个
rt.jar
。为什么不使用比旧版本更好的编译器?rt.jar
)。如果不需要7个功能,为什么甚至使用7个。答案 1 :(得分:1)
只需右键单击Project属性,然后转到Binding并选择JDK 1.7,前提是您在NetBeans项目中使用它的功能,这就是您遇到问题的原因。这将有助于解决问题并为我工作。
答案 2 :(得分:1)
我知道我需要设置bootstrap类路径,但我不确定我是怎么理解的。
在Netbeans 8.0.2中,请转到:
Run > Set Project Configuration > Customise...
在“类别”窗口中,转到:
Build > Compiling
底部字段是您可以添加的“其他编译器选项”:
-bootclasspath /your/path/to/lower/java/version/lib/rt.jar
答案 3 :(得分:1)
在macOS的控制台上具有相同的警告编译。这里要添加的编译器选项是
-bootclasspath /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar
请注意,在macOS上,对于Java版本<= 1.6(Apple发行的版本),rt.jar
被称为classes.jar
答案 4 :(得分:1)
在我的情况下,maven使用的是另一个Java版本,我通过在maven中更改所需的Java版本来修复了它。