Java 9項目Jigsaw的主要目標之一是可靠配置。也就是說,Java 9承諾解決類路徑機制缺陷,該缺陷允許啓動程序運行程序,但不確保所有必需的類都可用於運行時加載,這會導致java.lang.NoClassDefFoundError
s。Java中的可靠配置9
這是通過聲明module-info.java
中的模塊依賴關係以及全新的--module-path
選項來完成的。在啓動Java應用程序之前分析模塊圖。
但是,我仍然可以做到以下幾點。
- 可以說我有兩個模塊
com.spacey.explorer
和com.spacey.rocket
。com.spacey.explorer
使用由com.spacey.rocket
模塊定義和導出的類com.spacey.rocket.RocketZ
。在編譯和JARing兩個模塊之後,所有的東西都可以正常運行 - 現在我從
com.spacey.rocket
模塊中刪除com.spacey.rocket.RocketZ
類型並重新編譯並重新JAR只有這一個模塊。 - 我使用新編譯的
com.spacey.rocket
模塊運行先前編譯的com.spacey.explorer
模塊。 - 我得到...
java.lang.NoClassDefFoundError
,這可能是類似4個小時的應用程序正常運行時間後。
有沒有辦法來真正確保運行的Java應用程序不僅模塊圖(模塊路徑)的完整性進行驗證,但也實際類型的無障礙的全面檢查時,做了什麼?
否。模塊系統從不檢查類。 – Mordechai
你能詳細說說你的意思嗎?(3)。如果缺少一個類,如何用新編譯的'c.s.rocket'運行'c.s.explorer'? – nullpointer
@nullpointer與(1)中的完全一樣'java --module -path ../jars-dir --module com.spacey.explorer/com.spacey.explorer.MissionApp' – malloc4k