2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
由于您將問(wèn)題標(biāo)記為“Saxon”:Saxonica 目前使用 Oracle JDK 構(gòu)建已發(fā)布的 JAR 文件,但由于 Oracle 的許可變更,這可能會(huì)在未來(lái)發(fā)生變化。如果我們確實(shí)切換,用戶應(yīng)該無(wú)法區(qū)分。
不同 JVM 之間的兼容性水平如此之高,以至于我們甚至不用費(fèi)心在多個(gè) JVM 上進(jìn)行測(cè)試。我不記得曾經(jīng)有過(guò)在一個(gè) JVM 上運(yùn)行而不在另一個(gè) JVM 上運(yùn)行的錯(cuò)誤。當(dāng)然,您需要使用正確版本范圍內(nèi)的 JVM/JDK:Saxon 9.8 與 Java 6 及更高版本一起使用,Saxon 9.9 與 Java 8 及更高版本一起使用。
@StephenC 談到了有關(guān)支持哪些平臺(tái)和不支持哪些平臺(tái)的供應(yīng)商政策。在 Saxonica,這從來(lái)不是一個(gè)支持/不支持的二元決策。如果您發(fā)現(xiàn)我們可以在實(shí)驗(yàn)室中重現(xiàn)的問(wèn)題,那么我們會(huì)盡力解決;如果您發(fā)現(xiàn)只能通過(guò)使用某些特殊平臺(tái)來(lái)重現(xiàn)的問(wèn)題,那么我們會(huì)告訴您我們無(wú)法修復(fù)它:但這并不意味著您“不受支持”。這同樣適用于 Java 版本中的“和更高版本”——?dú)g迎您在 Java 版本 17 發(fā)布之日使用 Saxon,如果您發(fā)現(xiàn)使用日本日歷不再有效,那么我們會(huì)注意到這個(gè)事實(shí);我們不一定會(huì)修復(fù)它,但我們不會(huì)告訴您產(chǎn)品(或客戶或平臺(tái))不受支持。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
這個(gè)類是用 OpenJDK 還是 Sun / Oracle JDK 編譯的,這并不重要。給定版本的 OpenJDK 和相應(yīng)的 Oracle JDK 版本中的 Java 字節(jié)碼編譯器應(yīng)該生成相同的代碼1,如果使用等效選項(xiàng)等調(diào)用的話。編譯器是從相同的源代碼樹構(gòu)建的。
此外,據(jù)我所知,OpenJDK 和 Oracle JDK 編譯器不會(huì)將此信息放入已編譯的類中。深入研究 OpenJDK / Oracle JDK 8 的源代碼樹證實(shí)了這一點(diǎn)。標(biāo)準(zhǔn) javac 編譯器3沒(méi)有發(fā)出相關(guān)的未記錄屬性。
我可以使用相同的(第 3 方)罐子嗎?
是的。使用 OpenJDK 和 Oracle JDK 編譯 JAR 中的類應(yīng)該沒(méi)有區(qū)別。
需要注意的是 Java版本。如果第 3 方 jar 文件支持(比如說(shuō))Java 7,并且您嘗試將它與 Java 8(OpenJDK 或 Oracle)一起使用,那么您可能會(huì)遇到麻煩,您可能需要使用更新版本的 jar。檢查您所依賴的庫(kù)的支持站點(diǎn)2。
而且......當(dāng)然......您應(yīng)該徹底測(cè)試您的應(yīng)用程序,以確定可能(假設(shè))可歸因于更改為 OpenJDK 的任何問(wèn)題。
1 - 由于字節(jié)碼編譯器添加了一些包含源文件和目標(biāo)文件時(shí)間戳的未記錄屬性,因此文件可能不是逐字節(jié)相同的。編譯時(shí)可以抑制這種情況。
2 - 您可能會(huì)發(fā)現(xiàn)庫(kù)供應(yīng)商只會(huì)針對(duì) Oracle JDK 認(rèn)證他們的庫(kù)。如果您發(fā)現(xiàn)這種情況,您可能應(yīng)該直接與他們交談以了解其原因以及對(duì)您使用該庫(kù)的影響。這只能是一個(gè)短期問(wèn)題。(如果供應(yīng)商長(zhǎng)期拒絕支持 OpenJDK 或 Oracle JDK,他們將有可能失去相當(dāng)大比例的客戶。)
3 - 我隱約記得舊的 GNU Jikes 編譯器曾經(jīng)將其他非標(biāo)準(zhǔn)屬性放入“.class”文件中以識(shí)別編譯器,但這無(wú)助于區(qū)分 Oracle JDK 和 OpenJDK 編譯器。
添加回答
舉報(bào)