|
如需获取最新稳定版本,请使用 Spring Boot 4.0.4! |
Spring Boot 的 “NestedJarFile” 类
用于支持加载嵌套 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
上述示例展示了如何在 /BOOT-INF/classes 的 myapp.jar 中于位置 0063 处找到 A.class。
嵌套 JAR 中的 B.class 实际上可在 myapp.jar 中的位置 3452 处找到,而 C.class 位于位置 3980。
掌握此信息后,我们可以通过定位到外部 JAR 文件的相应部分来加载特定的嵌套条目。 我们无需解压该归档文件,也无需将所有条目数据读入内存。
与标准 Java “JarFile” 的兼容性
Spring Boot Loader 致力于保持与现有代码和库的兼容性。
NestedJarFile 继承自 JarFile,可作为即插即用的替代方案使用。
支持格式为 jar:nested:/path/myjar.jar/!BOOT-INF/lib/mylib.jar!/B.class 的嵌套 JAR URL,并可打开与 JarURLConnection 兼容的连接。
这些 URL 可与 Java 的 URLClassLoader 配合使用。