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
中找到A.class
,其位置为0063
。嵌套 jar 中的B.class
实际上可以在myapp.jar
中位置3452
找到,而C.class
位于位置3980
。
有了这些信息,我们可以通过跳转到外部 jar 的适当部分来加载特定的嵌套条目。我们不需要解压存档,也不需要将所有条目数据读入内存。