2013-04-08 84 views
21

所以我getting- 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源代码,因此也提到了老方法。我不知道如何或何时发生。

回答

36

您正在进行交叉编译。您正在使用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
+1

谢谢,我觉得这个清理了一下 – Stephopolis 2013-04-08 16:47:44

+7

Downvoting,因为几个解决方案都没有给出任何指导如何去做。 – seansand 2014-01-31 17:17:02

+0

@toomasr请理解,回到较旧的JDK很容易在本地机器上工作(MacOs是一个例外btw)。在(大型)公司工作时,您经常无法更改您的JDK。例如,您的开发计算机上必须使用1.7,而您的目标服务器仍然是1.6。当然,您现在可以等到他们(服务器管理员)最终迁移到1.7或者您表现得像专业人员并完成您的工作。你会选择什么? – whaefelinger 2014-07-02 09:54:46

1

只要去右击项目属性,然后去绑定,并选择所提供的JDK 1.7使用的是它在你的NetBeans项目特点和这就是你解决问题的原因。这将有助于解决问题并为我工作。

+0

'绑定'到JDK 1.7如何帮助指定1.6作为引导类路径? – 2016-02-10 22:19:15

0

据我所知,我需要设置引导类路径,但我不知道如何。

在Netbeans 8.0中。2,请访问:

Run > Set Project Configuration > Customise... 

在分类窗口,请访问:

Build > Compiling 

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

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