2

在项目属性的“Java Compiler”部分,有一些“JDK Compliance”的设置。我想将源兼容性设置为 6,将 .class 文件的兼容性设置为 5。这显然是不允许的:我收到消息“类文件兼容性必须大于或等于源兼容性”。

这是 Eclipse 的限制还是 Java 版本兼容性的基本问题?有解决方法吗?

我想在开发和大多数目标中使用 Java 6,但我想为某些目标(例如 Mac)生成 Java 5 兼容的工件。如果这意味着有两个构建,我很好,只要它是相同的来源。

4

6 回答 6

5

正如 Eclipse 所说,您不能从 java6 源代码生成 java5 类文件,这不是一种选择。如果需要生成 java5 构建,则需要使用 java5 源级别。

你真的需要使用 Java6 源代码级别吗?如果您需要使用 Java6 API 中的某些东西,那么当您尝试运行这些构建时,将无法为 Java5 生成构建。如果您不需要使用 Java6 API,那么您也不需要使用 Java6 源代码兼容性。

于 2009-07-28T10:12:25.780 回答
2

出现问题的部分原因不仅是类格式发生了变化,而且 Java 6 添加了/与 Java 5 不同的 API。因此,您可能无意中使用了这些 API,然后当您在 Java 上部署时,实现将丢失5.

如果 Java 5 对您很重要,我会针对 Java 5 SDK 进行开发和构建。这是知道一切都会按预期工作的唯一可靠方法。

我(曾经)设计了一个跨 SDK 兼容的项目。它需要两个构建(每个 SDK 一个),并且代码必须根据使用的 SDK 有条件地加载所需的 API 类。我真的一点都不建议!

注意:您提到了 Mac。Java 6 可用于 Mac(不确定这是否是您提到 Mac 的原因)

于 2009-07-28T10:18:01.820 回答
2

另请参阅指向类似(较旧)问题的此线程:
“Java 理论与实践:在早期 JDK 中使用 Java 5 语言功能”

除非您使用某种外部工具将 Java 6 字节码转换为与 Java 1.5 兼容的字节码,否则您实际上无法将类合规性设置为 1.5 并将源代码合规性设置为 6.0。

于 2009-07-28T10:22:16.303 回答
1

无法完成。
如果不需要 Java 6,请使用 Java 5 源代码级别。
如果你需要 Java 6,你不能只用 Java 5 编译它。

于 2009-07-28T10:18:30.370 回答
0

我以前也这样做,但忘记了如何:(。我在下面找到了这个链接,它似乎显示了一种方法,这可能是我过去在自己的项目中所做的。然后你将你的 eclipse 类和源版本设置为 1.6在构建它时使用 Ant 构建来获得正确的类版本。

来自: http: //www.masutti.ch/eel/(已在上一个答案中链接)

更新:在 Eclipse 3.2 中,这必须在你的 ant 脚本的 javac 行中看起来不同,像这样设置源和目标

javac (...) source="1.5" target="jsr14" (...)

我用一个简单的项目尝试了它,它在 eclipse 3.4 中对我有用。您可以使用 File->export->General->Ant Buildfiles 为简单项目自动生成 build.xml。然后我只是调整了这一行:

'属性名称="目标" 值="jsr14"/>

并使其重建。

然而,它很容易出错。我必须将我所有的 'System.out.printf' 更改为 'System.out.print' ,否则它只会引发异常。您可以通过将源合规性设置为 1.4 来检查您的源,然后修复明显的东西(如 printfs),然后再次将其更改回来。

于 2009-08-19T05:59:12.867 回答
0

实际上,事实证明,您可以完全按照 OP 想要的方式执行操作,只是不能在 Eclipse IDE 中执行。您必须手动编辑文件org.eclipse.jdt.core.compiler.codegen.targetPlatform中的属性project>settings folder>org.eclipse.jdt.core.prefs

当然,当你这样做时,你可能会得到一些非常糟糕的结果,正如其他海报所暗示的那样,所以如果有的话,请小心地做这种事情。

有关更多信息,请参阅

于 2013-01-14T16:37:45.693 回答