【问题标题】:bootstrap class path not set未设置引导类路径
【发布时间】:2013-04-08 15:05:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java class netbeans compiler-warnings


    【解决方案1】:

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

    【讨论】:

    • 投反对票,因为给出了几种解决方案,但根本没有说明如何去做。
    • @toomasr 请理解,回到旧的 JDK 很容易在本地机器上工作(顺便说一句,MacO 是一个例外)。在为(较大的)公司工作时,您通常无法更改 JDK。例如,您必须在您的开发机器上使用 1.7,而您的目标服务器仍然使用 1.6。当然,您现在可以等到他们(服务器管理员)最终升级到 1.7,或者您表现得像个专业人士并完成您的工作。你的选择是什么?
    • +2 表示好的、有用的洞察力和一些不错的解决方案,-1 表示没有提供(非常有用的 IMO)详细信息 seansand 提到......好吧,在我的书中它仍然是 +1 .
    • 关于如何做... 在编译期间添加这个选项 javac -bootclasspath C:\Java\jre\1.6.0\lib\rt.jar
    • @Hemang 请参阅docs.oracle.com/javase/7/docs/technotes/tools/solaris/… 的交叉编译部分了解命令行详细信息。
    【解决方案2】:

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

    在 Netbeans 8.0.2 中,转到:

    Run > Set Project Configuration > Customise...
    

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

    Build > Compiling
    

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

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

    【讨论】:

      【解决方案3】:

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

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

      请注意,在 macOS 上,对于 Java 版本 rt.jar 称为 classes.jar

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • “绑定”到 JDK 1.7 如何帮助将 1.6 指定为引导类路径?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-30
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          • 1970-01-01
          • 2019-05-24
          相关资源
          最近更新 更多