Java 未设置引导类路径

Java 未设置引导类路径,java,class,netbeans,compiler-warnings,Java,Class,Netbeans,Compiler Warnings,因此,我得到-警告:[options]引导类路径未与-source 1.6一起设置 我想问三个问题。我知道我需要设置引导类路径,但我不确定我是否理解如何设置。一个快速的谷歌刚刚将我发送到引用Oracle页面的页面,但我阅读了Oracle页面,并没有感觉到我特别理解它 我目前正在Netbeans上运行这段代码,所以我所要做的就是点击play按钮编译并运行它。是否有一个属性指示如何编译,以便我可以添加到引导类路径中 另外,对于即将发生的情况,我将不再只在Netbeans上运行它,而是从命令行运行它,

因此,我得到-
警告:[options]引导类路径未与-source 1.6一起设置

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

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

另外,对于即将发生的情况,我将不再只在Netbeans上运行它,而是从命令行运行它,使用那里的引导类路径进行编译的正确方法是什么?他们说
$javac-source6helloworld.java
,但仅仅说明
-source1.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呢
  • 忽略警告,并进行良好的测试覆盖,以确保您不使用Java7特性
    • 我不知道NetBeans,但在Eclipse中,您也可以说您是针对JDK 6编译的,所以如果您使用Java 7特性,它实际上不会编译
  • 更改业务需求并编译Java 7

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

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

在Netbeans 8.0.2中,转到:

Run > Set Project Configuration > Customise...
在“类别”窗口中,转到:

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

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

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

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

请注意,在macOS上,对于Java版本,在我的例子中,maven使用的是另一个Java版本,我通过在maven中更改所需的Java版本来修复它。

向下投票,因为给出了一些解决方案,但根本没有说明如何执行它们。@toomasr请理解,在本地机器上使用旧的JDK很容易(顺便说一句,MacOs是一个例外)。在(大型)公司工作时,您经常无法更改JDK。例如,您必须在开发机器上使用1.7,而您的目标服务器仍然使用1.6。当然,您现在可以等到他们(服务器管理员)最终转到1.7,或者你表现得像个专业人士,完成你的工作。你会选择什么?+2表示良好、有用的洞察力和一些好的解决方案,-1表示不提供(非常有用的IMO)详细信息
seansand
提到了…好吧,在我的书中它总共还是+1。关于如何做…在编译过程中添加这个选项javac-bootclasspath C:\Java\jre\1.6.0\lib\rt。jar@Hemang有关命令行的详细信息,请参阅中的交叉编译部分。“绑定”到JDK1.7如何帮助指定1.6作为引导类路径?