【问题标题】:java compiler's target version "jsr14" with JDK7/8带有 JDK 7/8 的 java 编译器目标版本“jsr14”
【发布时间】:2010-10-30 12:19:33
【问题描述】:

谁能告诉我javacjsr14 目标选项在JDK7/8 中仍然可用吗?

说,

$ javac -source 1.5 -target jsr14 Hello.java

【问题讨论】:

标签: java javac java-7


【解决方案1】:

我们在 OSGi 中大量使用 -jsr14,因为它允许我们在 API 中使用泛型,但仍然部署在 1.4 环境中,这些环境在嵌入式中仍然很流行。不幸的是,他们使 JDK 7 不能向后兼容 Java 6 和 5。Javac 1.7 忽略了 JAR 文件中实际存在的通用信息。幸运的是,在运行时没有问题,因为无论如何都会忽略此信息。而且这似乎不是一些未记录的功能......

不幸的是,在前线的人通常很少关心那些不能更新到最新和最伟大的人。猜猜甲骨文真的不再关心嵌入式市场了。

我们现在可能不得不发布两个 JAR,一个用于嵌入式,一个用于 JDK 7。太糟糕了。

这是我们提交的错误报告:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7078419

【讨论】:

  • Eclipse P2 出于类似的原因使用 jsr14 目标。不幸的是,运行时没有问题是不正确的。在使用 jsr14 目标编译的类型上使用反射时,OpenJDK 会爆炸。这在使用 Spring DM 或 Blueprint 时尤其成问题,如下所示:gist.github.com/1251497
  • 我遇到了这个 OSGi 问题。有我可以投票支持的 OSGi 错误报告吗?注意:JDK bug 报告的解决方法是:Not a Defect 它必须在 OSGi 端修复。
  • 我在这里提交了一个问题:issues.apache.org/jira/browse/FELIX-3455 请为它投票。
【解决方案2】:

最新的 OpenJDK 源包 (openjdk-7-ea-src-b130-18_feb_2011.zip) 仍然包含源中的标志 (langtools/src/share/classes/com/sun/tools/javac/jvm/Target.java),但它从未被支持,因此依赖它是一个坏主意。

你为什么需要它?

【讨论】:

  • 因为我曾经为我的 Java ME STBoxes 编写 1.5 代码并为 1.4 目标编译。
  • @Jin:我会使用一个受支持的目标,并使用RetroweaverRetrotranslator 之类的东西对结果进行后处理。
【解决方案3】:

自 1.5 的 beta 阶段以来,该标志已被废弃。 仅包含它以允许 1.5 beta 编译器默认绕过泛型检查/解析,而泛型规范尚未最终确定。 一旦 1.5 发布,该标志就变得毫无意义。新的编译器版本在遇到它时可能不会出错,但很可能会默默地忽略它。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2015-07-23
    • 2010-11-20
    • 2015-08-20
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多