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