编译为1.5编写的Java代码以使用1.4 JRE?

时间:2009-06-10 10:46:58

标签: java ant compilation backwards-compatibility

我有一个使用泛型和一些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)

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

javac: source release 5 requires target release 1.5

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

4 个答案:

答案 0 :(得分:7)

我没有使用过这些解决方案,但有

  1. Retroweaver
  2. 指定不受支持的-target jsr14 可以工作
  3. Retrotranslator
  4. Declawer
  5. JBossRetro
  6. 您可能还会发现javac -XD-printflat有用(但请注意不要覆盖原始来源)。

答案 1 :(得分:6)

  

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

没有

  

我是否必须经历所有事情   我的代码并将1.5内容更改为   让这个工作?

是。但是有一种方法可以使用名为Retroweaver的工具实现自动化。虽然不能保证它能抓住一切。

答案 2 :(得分:1)

我有很好的使用Retrotranslator的经验(逆向导管不能很好地满足我的需要,不记得究竟是什么)。

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

http://retrotranslator.sourceforge.net/

答案 3 :(得分:0)

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