[英]Can newer JRE versions run Java programs compiled with older JDK versions?
這可能是一個愚蠢的問題,但是在運行用Java 1.6 和 1.7編譯的Java程序和相關庫(我使用1.7進行編譯,而某些庫是使用1.6進行編譯)並在1.7 JRE中運行整個程序時,我會遇到任何問題?
前面已經回答了你大多是安全的, 最產品和第三方庫將簡單的工作。 但是, 確實存在極少數情況,即在JDK版本之間引入了二進制不兼容 ( 使用舊JDK編譯的類文件將無法在較新的JVM中運行的 二進制不兼容 )。
與JDK 9打包在一起,有一個名為jdeprscan的工具,它將驗證兼容性,在代碼中列出不再使用的API並建議替代方法(!)。 您可以指定目標JDK版本 (適用於JDK 9,8,7和6),它會列出具體到你的目標版本不兼容。
一個合理的經驗法則是將庫的最新穩定發行版用於您的軟件所針對的JRE版本。 顯然,您會從此規則中發現許多例外,但通常來說,公共庫的穩定性通常會隨着時間而增加。
自然,在更改依賴版本時,必須考慮API兼容性和版本控制 。
再次,最流行的依賴項將是應該提供此類信息的網頁。
但是,如果您使用的方法更加晦澀難懂,則可以確定依賴項中針對哪些JRE類進行了編譯。
這是有關如何查找類版本的好答案 。 您可能需要先解壓縮JAR文件。
您不會遇到任何問題-這就是Java的魔力-它是向后兼容的。您可以在Java 8上運行Java 1的幾乎所有代碼。沒有理由不能在Java 8 Runtime上運行Java 6代碼。
有趣的是,對於用Java 1.4編寫的應用程序,在以后的運行時運行它們甚至可以提高速度。 這是因為Java一直在不斷發展,不僅是被稱為“ Java”的語言,而且還是JVM(Java虛擬機)。 正如最新的JVM所預期的那樣,我仍然可以使用10年前的源代碼。
如果要定位Java 5 VM,則可以使用Java 8 SDK工具來實現。 只要記住第5版VM可能不支持第8版VM的所有功能,就可以最終指定希望支持的目標VM。
我剛剛針對新的Java 8運行時測試了用Java 5寫的代碼,並且一切都按預期運行,因此,即使我們現在擁有更強大的語言和運行時,我們仍可以繼續使用過去的投資。 僅此一項就使Java成為公司的絕佳開發選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.