跳到主要内容
版本:3.5.10

Spring Boot 的 “NestedJarFile” 类

QWen Max 中英对照 Spring Boot’s “NestedJarFile” Class

用于支持加载嵌套 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 文件的相应部分来加载特定的嵌套条目。我们无需解压归档文件,也无需将所有条目数据读入内存。

与标准 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 一起使用。