【问题标题】:Compiling Java code written for 1.5 to work with 1.4 JRE?编译为 1.5 编写的 Java 代码以使用 1.4 JRE?
【发布时间】:2009-06-10 10:46:58
【问题描述】:

我有一个使用泛型和一些 Java 1.5/6 的项目。 是否可以编译此代码以在运行 1.4 JRE 的系统上工作?

我使用 ANT 构建脚本和 javac 任务来编译库。这在目标属性为 1.5 时构建良好。

如果我将目标更改为 1.4,我会收到以下错误:

generics are not supported in -source 1.4 
(use -source 5 or higher to enable generics)

所以我添加了一个源属性并尝试了 5 和 1.5 的值。新错误:

javac: source release 5 requires target release 1.5

我是否必须检查所有代码并更改 1.5 的内容才能使其正常工作?

【问题讨论】:

  • Note 1.4 已结束其使用寿命,而 1.5 已基本完成。但是,“Java for Business”支持需要付费。

标签: java ant compilation backwards-compatibility


【解决方案1】:

我没有使用过这两种解决方案,但是有

  1. Retroweaver
  2. 指定不受支持的-target jsr14 可能工作
  3. Retrotranslator
  4. Declawer
  5. JBossRetro

您可能还会发现javac -XD-printflat 很有用(但请注意不要覆盖您的原始来源)。

【讨论】:

  • 第二个似乎有效。现在来测试该库是否真的可以在 JRE 1.4 上运行...
  • jsr14 不会削减它。没有枚举支持。另一方面,Retroweaver 很棒。
  • 谢谢,直到现在我才知道 Retroweaver。大多数这些工具都明确声明它们可以针对 1.4,但据我所知,只有 Retroweaver 允许您也针对 1.2,这可能是 J2ME 开发所需要的。
【解决方案2】:

我有一个使用泛型的项目 和一些 Java 1.5/6 的点点滴滴。 是否可以将此代码编译为 在运行 1.4 JRE 的系统上工作?

没有。

我是否必须经历所有 我的代码并将 1.5 的内容更改为 完成这项工作?

是的。但是有一种方法可以自动化,使用一个名为Retroweaver 的工具。不能保证它会捕获所有内容。

【讨论】:

    【解决方案3】:

    我在使用 Retrotranslator 方面有过很好的经验(retroweaver 不能很好地满足我的需求,不记得具体是什么了)。

    它非常适合我的目的(创建 JDK1.4 版本的 Logback)。

    http://retrotranslator.sourceforge.net/

    【讨论】:

      【解决方案4】:

      泛型是通过类型擦除实现的,因此它们应该在引入泛型之前工作。但是,您将无法使用旧版本的编译器编译代码(我不知道您为什么要这样做)

      【讨论】:

      • 使用 JDK 1.6 编译器。您可以指定目标版本和源版本似乎很奇怪,但如果它们不同,则会出错。
      • 您可以指定比目标版本更早的源版本。因此,带有枚举的 1.4 源代码 enum 仍然可以编译并在未修改的使用生命周期的 JDK 上工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多