7

我有一个使用泛型和一些 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 的内容才能使其正常工作?

4

4 回答 4

7

我没有使用这些解决方案中的任何一个,但是有

  1. 逆织
  2. 指定不受支持的-target jsr14 可能有效
  3. 逆向翻译器
  4. 德克劳尔
  5. JBoss复古

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

于 2009-06-10T10:54:15.727 回答
6

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

不。

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

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

于 2009-06-10T10:55:14.803 回答
1

我对 Retrotranslator 有很好的经验(retroweaver 不能很好地满足我的需求,不记得具体是什么)。

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

http://retrotranslator.sourceforge.net/

于 2009-06-10T11:47:15.587 回答
0

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

于 2009-06-10T10:54:01.500 回答