亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何知道一個類是用 openjdk 還是 sunjdk 編譯的?

如何知道一個類是用 openjdk 還是 sunjdk 編譯的?

飲歌長嘯 2022-03-10 10:52:36
我想在我的產品中使用一些第三方罐子,比如 saxonica。之前我們使用 Oracle JDK?,F在,我們正在刪除 Oracle JDK 以使用 OpenJDK。我可以用同一個罐子嗎?在這種情況下,我想知道我的 jar 是用 Oracle JDK 還是 OpenJDK 構建的?我怎么知道呢?
查看完整描述

2 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

由于您將問題標記為“Saxon”:Saxonica 目前使用 Oracle JDK 構建已發布的 JAR 文件,但由于 Oracle 的許可變更,這可能會在未來發生變化。如果我們確實切換,用戶應該無法區分。

不同 JVM 之間的兼容性水平如此之高,以至于我們甚至不用費心在多個 JVM 上進行測試。我不記得曾經有過在一個 JVM 上運行而不在另一個 JVM 上運行的錯誤。當然,您需要使用正確版本范圍內的 JVM/JDK:Saxon 9.8 與 Java 6 及更高版本一起使用,Saxon 9.9 與 Java 8 及更高版本一起使用。

@StephenC 談到了有關支持哪些平臺和不支持哪些平臺的供應商政策。在 Saxonica,這從來不是一個支持/不支持的二元決策。如果您發現我們可以在實驗室中重現的問題,那么我們會盡力解決;如果您發現只能通過使用某些特殊平臺來重現的問題,那么我們會告訴您我們無法修復它:但這并不意味著您“不受支持”。這同樣適用于 Java 版本中的“和更高版本”——歡迎您在 Java 版本 17 發布之日使用 Saxon,如果您發現使用日本日歷不再有效,那么我們會注意到這個事實;我們不一定會修復它,但我們不會告訴您產品(或客戶或平臺)不受支持。


查看完整回答
反對 回復 2022-03-10
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

這個類是用 OpenJDK 還是 Sun / Oracle JDK 編譯的,這并不重要。給定版本的 OpenJDK 和相應的 Oracle JDK 版本中的 Java 字節碼編譯器應該生成相同的代碼1,如果使用等效選項等調用的話。編譯器是從相同的源代碼樹構建的。

此外,據我所知,OpenJDK 和 Oracle JDK 編譯器不會將此信息放入已編譯的類中。深入研究 OpenJDK / Oracle JDK 8 的源代碼樹證實了這一點。標準 javac 編譯器3沒有發出相關的未記錄屬性。


我可以使用相同的(第 3 方)罐子嗎?

是的。使用 OpenJDK 和 Oracle JDK 編譯 JAR 中的類應該沒有區別。

需要注意的是 Java版本。如果第 3 方 jar 文件支持(比如說)Java 7,并且您嘗試將它與 Java 8(OpenJDK 或 Oracle)一起使用,那么您可能會遇到麻煩,您可能需要使用更新版本的 jar。檢查您所依賴的庫的支持站點2

而且......當然......您應該徹底測試您的應用程序,以確定可能(假設)可歸因于更改為 OpenJDK 的任何問題。


1 - 由于字節碼編譯器添加了一些包含源文件和目標文件時間戳的未記錄屬性,因此文件可能不是逐字節相同的。編譯時可以抑制這種情況。

2 - 您可能會發現庫供應商只會針對 Oracle JDK 認證他們的庫。如果您發現這種情況,您可能應該直接與他們交談以了解其原因以及對您使用該庫的影響。這只能是一個短期問題。(如果供應商長期拒絕支持 OpenJDK 或 Oracle JDK,他們將有可能失去相當大比例的客戶。)

3 - 我隱約記得舊的 GNU Jikes 編譯器曾經將其他非標準屬性放入“.class”文件中以識別編譯器,但這無助于區分 Oracle JDK 和 OpenJDK 編譯器。


查看完整回答
反對 回復 2022-03-10
  • 2 回答
  • 0 關注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號