![](/img/trans.png)
[英]why java 1.4 compiler does not complain about a third party library compiled with 1.5 compiler?
[英]Will JRE 1.4 support classes compiled with Java 1.5 & 1.6?
你可以交叉編譯。 本文檔向您展示如何:
http://java.sun.com/javase/6/docs/technotes/tools/solaris/javac.html#crosscomp-example
您必須指定您要定位的特定主要版本(1.4,聽起來像)。
使用這種技術,您最好的選擇是始終使用您能找到的最新javac! 這樣您就可以獲得所有最新的錯誤修復和性能改進,而且非常安全。
編輯:請注意,這確實解決了庫不兼容問題,這在幾個答案中討論過!
僅當您使用javac -target 1.4
開關編譯時。
顯然,您將無法使用1.5+功能,例如Generics,Executors等。
如果您只使用默認的javac
1.6構建,那么您的類文件將無法在舊版本的Java上運行。
編譯舊Java的最佳方法就是使用較舊的JDK版本 。 但是,如果您真的想嘗試從較新的Java編譯舊Java,這里有一些說明:
我認為不會。
偶爾(由於原因太復雜而無法解釋),我嘗試在1.5 JRE中運行代碼,我在1.6 JDK中編譯。 它通常會拋出java.lang.UnsupportedClassVersionError異常。
是的,不是。 如果在編譯時將“源”和“目標”javac選項設置為您要定位的版本(例如1.4),則可以在1.4 jvm上運行在Java 6下編譯的代碼。 這將適用於您未使用自目標版本以來添加的任何其他類或語言功能的情況。
祝好運。
是的,您可以使用1.6編譯器(javac)生成與1.4兼容的類文件,但是,這樣做不一定會產生可行的代碼。 問題是,仍然會針對1.6版本的API進行編譯。
乍一看你不會期望這是一個問題,因為合同不應該改變,但它是 - 我有一個問題,一個新的構造函數,將IIRC一個整數添加到BigDecimal(在1.5),所以在編譯時然而,在運行時指定了對該構造函數的調用,即構造函數不存在,因此運行時異常。 當方法過載並且您依賴於自動變量轉換時,您可能會遇到類似問題。
Javac應用程序實際上獨立於它所屬的Java版本 - 您可以指定一個不同的API來對抗1.6 javac,並且為了避免任何運行時問題,應該這樣做。
Java 1.5是一個主要的版本,它引入了枚舉,自動裝箱和其他東西。在編譯時你會得到異常說不支持的類版本。但是如果使用命令javac -source 1.4 -target 1._ claasname.java進行編譯它將編譯。
如果您在該場景中使用1.5的自動裝箱和枚舉功能,則無法編譯,因為這些功能在1.4中不可用。在這種情況下,我們需要根據某些工具將代碼轉換為舊版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.