2009-07-07 130 views
1

我一直在使用的參數編譯我的源代碼與Java版本1.6 -source 1.5-target 1.5和犯規抱怨,在所有的編譯器。Java和「朝前」兼容性問題

然而,應用程序將無法與Java 1.5由於缺少方法運行。當然,我可以重寫一些我的源代碼是1.5兼容的,但我不明白的是;底部的java字節碼不應該是「前端」兼容?

是不是轉換成字節碼的方法?是否有可能將1.6 libs/methods(formely String.isEmpty())編譯爲1.5字節碼並將其全部打包到歸檔中?

回答

3

全套的命令行選項,你需要的是:

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar 

(更改引導類路徑,以然而你的機器安裝。)

當然,API的增強功能在1.6將不會在1.5。 1.5通過其服務壽命終了的大部分時間,所以你可能要考慮最低1.6。

+0

唯一的問題,Mac OSX,它說自己它是唯一的操作系統與完全集成的Java,不支持1.6:/ – 2009-07-08 19:43:08

1

我不相信java會向後重新編譯原生Java代碼。所以,如果你犯了一個1.6調用 - 你將不能訪問它在1.5

+0

如果您正在運行的JRE是1.6,那麼這一切取決於哪個JRE運行您的代碼 - 它正在提供這些庫。 – 2009-07-07 19:34:10

6

如果你的意思基本Java庫方法,則沒有,這些方法不是在編譯時轉換成字節碼;它們已經被Sun(或第三方JVM分發器)編譯爲字節碼並安裝在您的操作系統上。它們是,編號爲,由編譯後的代碼使用。

1

您可以將正在編譯的庫更改爲較舊的庫。在eclipse這樣的軟件包中,每個安裝的JDK都應該顯示在「Select library」窗口中,您可以選擇希望編譯哪一個。

如果沒有,你應該能夠覆蓋它在你的Ant文件或CLI命令編譯。

如果定位一個老版本的JVM,這真的有許多工作要做,或者您可以使用電話,將無法使用。

1

源參數只能使在語言的語法水平(源= 1.4將例如抱怨,如果它遇到的仿製藥)編譯器檢查,但不會限制你只能使用指定的Java版本可用的API。

目標參數,將可通過指定版本的運行時可以使用,但不會(就像-source)驗證任何API符合編譯器的輸出類文件。