2016-01-22 121 views
0

我們是否可以使用JDK 1.8編譯器來編譯sourceCompatibility選項設置爲1.7的源代碼。build.gradle中的sourceCompatibility選項爲1.7

ModuleA將此設置爲1.7,ModuleB和ModuleC將此設置爲1.8。我應該使用什麼編譯器來編譯所有上述模塊。我假設它應該是JDK 1.7。

回答

0

我假設你有兩個問題:

使用jdk8來編譯java7編寫的程序:是的,JAVA是著名的向後兼容性。

使用什麼jdk編譯項目,使用不同源代碼兼容性編寫的模塊:使用最新版本。在你的情況下,jdk8。如果出現問題,請安裝並使用多個jdks。

編輯:確實,如果你用jdk8編譯java 7 prog,但在我的200多個本地版本和400+ CI版本中,沒有任何問題。問題率太低,我只是把它考慮在內。如果您認爲它非常重要,請始終安裝並使用匹配的jdks。

1

使用1.8編譯器編譯1.7代碼時可能會遇到問題。 僅僅設置-sourcetarget1.7是不夠的,你應該在編譯過程中得到一個警告,告訴引導類路徑。

如果您不小心使用了引入1.8 - e.g. this one的類或方法,編譯器將無法捕獲它。在1.7運行時運行代碼將會失敗,然後NoSuchMethodError。因此,如果您打算在1.7運行時上運行代碼,則應該使用1.7編譯器編譯或設置bootclasspath。

0

我同意弗蘭克,你可能會遇到運行時問題。我們通過使用更新的JDK來編譯應該在舊JRE上運行的代碼,發現actual one

相關問題