Spring Boot 的 “NestedJarFile” 類別
用來支援載入巢狀 jar 的核心類別是 org.springframework.boot.loader.jar.NestedJarFile
。它讓您可以從巢狀子 jar 資料載入 jar 內容。首次載入時,每個 JarEntry
的位置都會映射到外部 jar 的實體檔案偏移量,如下例所示
myapp.jar
+-------------------+-------------------------+
| /BOOT-INF/classes | /BOOT-INF/lib/mylib.jar |
|+-----------------+||+-----------+----------+|
|| A.class ||| B.class | C.class ||
|+-----------------+||+-----------+----------+|
+-------------------+-------------------------+
^ ^ ^
0063 3452 3980
先前的範例顯示如何在 myapp.jar
中的 /BOOT-INF/classes
位置 0063
找到 A.class
。巢狀 jar 中的 B.class
實際上可以在 myapp.jar
中的位置 3452
找到,而 C.class
則在位置 3980
。
有了這些資訊,我們可以透過搜尋外部 jar 的適當部分來載入特定的巢狀項目。我們不需要解壓縮封存檔,也不需要將所有項目資料讀取到記憶體中。