我們是否可以使用JDK 1.8編譯器來編譯sourceCompatibility選項設置爲1.7的源代碼。build.gradle中的sourceCompatibility選項爲1.7
ModuleA將此設置爲1.7,ModuleB和ModuleC將此設置爲1.8。我應該使用什麼編譯器來編譯所有上述模塊。我假設它應該是JDK 1.7。
我們是否可以使用JDK 1.8編譯器來編譯sourceCompatibility選項設置爲1.7的源代碼。build.gradle中的sourceCompatibility選項爲1.7
ModuleA將此設置爲1.7,ModuleB和ModuleC將此設置爲1.8。我應該使用什麼編譯器來編譯所有上述模塊。我假設它應該是JDK 1.7。
我假設你有兩個問題:
使用jdk8來編譯java7編寫的程序:是的,JAVA是著名的向後兼容性。
使用什麼jdk編譯項目,使用不同源代碼兼容性編寫的模塊:使用最新版本。在你的情況下,jdk8。如果出現問題,請安裝並使用多個jdks。
編輯:確實,如果你用jdk8編譯java 7 prog,但在我的200多個本地版本和400+ CI版本中,沒有任何問題。問題率太低,我只是把它考慮在內。如果您認爲它非常重要,請始終安裝並使用匹配的jdks。
使用1.8編譯器編譯1.7代碼時可能會遇到問題。 僅僅設置-source
和target
到1.7
是不夠的,你應該在編譯過程中得到一個警告,告訴引導類路徑。
如果您不小心使用了引入1.8 - e.g. this one的類或方法,編譯器將無法捕獲它。在1.7運行時運行代碼將會失敗,然後NoSuchMethodError
。因此,如果您打算在1.7運行時上運行代碼,則應該使用1.7編譯器編譯或設置bootclasspath。
我同意弗蘭克,你可能會遇到運行時問題。我們通過使用更新的JDK來編譯應該在舊JRE上運行的代碼,發現actual one。