在 Java 1.7 上为 Java 1.5 编译是否仍然有效?

2022-09-04 06:24:50

我最近在我的一个项目中迁移到了Java 7。我声称它可以在Java 1.5上运行,仅仅是因为我在Java 6或7中没有任何东西依赖它。然而,在今天编译时,我注意到了这一点:

bootstrap class path not set in conjunction with -source 1.5

谷歌几乎没有发现有关此警告的信息。这是否意味着您无法从 Java 1.7 编译到 Java 1.5?


答案 1

此 Oracle 博客解释了该警告:

http://blogs.oracle.com/darcy/entry/bootclasspath_older_source

原因是,如果您无法为旧平台设置rt.jar,那么:

如果不采取第二步,javac将尽职尽责地使用旧语言规则与新库相结合,这可能导致类文件在旧平台上不起作用,因为可以包含对不存在的方法的引用。


答案 2

这是否意味着您无法从 Java 1.7 编译到 Java 1.5?

不,它没有。这意味着有正确的方式和错误的方式来做到这一点......你以错误的方式做了。

在 Java 1.7 JDK 上编译 Java 1.5 的正确方法是:

  • 从 Java 1.5 中获取“rt.jar”的副本,并将其放在编译引导类路径上。

  • 使用 -source 1.5 和 -target 1.5 进行编译。

警告消息告诉您尚未完成其中的第一个操作。


您现在正在构建的方式是隐式使用 1.7 版本的 “rt.jar” 作为 Java 运行时 API。这可能有效!(实际上,假设自上次在1.5上构建以来,您没有对代码进行任何更改,它应该可以正常工作。但是,存在一种风险,即您可能会意外地引入对 Java 1.6 或 1.7 中添加的类或方法的依赖关系。当您尝试在 Java 1.5 上运行应用程序时,这将导致运行时错误。


推荐