2009-06-10 86 views
7

我有一個項目,使用泛型和一些Java 1.5/6個零碎。 是否有可能編譯此代碼以在運行1.4 JRE的系統上工作?編寫用於1.5編寫的Java代碼以使用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的東西,使這項工作?

+0

注1.4已經完成它的使用壽命週期和1.5是它的大部分的方式,通過。但是,「Java for Business」支持的價格是可用的。 – 2009-06-10 11:55:43

回答

7

我沒有用這兩種解決方案,但有

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

您也可能會發現javac -XD-printflat有用(雖然小心不要覆蓋原始源)。

0

泛型是通過類型擦除實現的,所以它們應該在泛型引入之前工作。然而,你將無法使用舊版本的編譯器來編譯代碼(我不知道你爲什麼會想這樣做)

+0

使用JDK 1.6編譯器。看起來很奇怪,您可以指定目標版本和源版本,但如果這些版本不相同,則會出現錯誤。 – 2009-06-10 11:12:05

+0

您可以指定比目標版本更早的源版本。因此,您的1.4源Enumerations調用enum仍然可以編譯並在未修改的工作中使用JDK。 – 2009-06-10 11:54:43

6

I have a project that uses generics and a few Java 1.5/6 bits and pieces. Is it possible to compile this code to work on a system running a 1.4 JRE?

Am I going to have to go through all my code and change the 1.5 stuff to make this work?

是。但是有一種方法可以使用名爲Retroweaver的工具自動化。但不能保證它能抓住一切。

1

我已經有了Retrotranslator的經驗(retroweaver並不能很好地滿足我所需要的,不能準確記得究竟是什麼)。

它對我的目的非常有效(創建Logback的JDK1.4版本)。

http://retrotranslator.sourceforge.net/