对于最新的稳定版本,请使用 Spring Boot 3.5.5spring-doc.cadn.net.cn

Spring Boot 的“NestedJarFile”类

用于支持加载嵌套 jar 的核心类是NestedJarFile. 它允许您从嵌套的子 jar 数据加载 jar 内容。 首次加载时,每个JarEntry映射到外部 jar 的物理文件偏移量,如以下示例所示:spring-doc.cadn.net.cn

myapp.jar
+-------------------+-------------------------+
| /BOOT-INF/classes | /BOOT-INF/lib/mylib.jar |
|+-----------------+||+-----------+----------+|
||     A.class      |||  B.class  |  C.class ||
|+-----------------+||+-----------+----------+|
+-------------------+-------------------------+
 ^                    ^           ^
 0063                 3452        3980

前面的示例演示了如何A.class可以在/BOOT-INF/classesmyapp.jar在位置0063.B.class从嵌套的 jar 实际上可以在myapp.jar在位置3452C.class在位置3980.spring-doc.cadn.net.cn

有了这些信息,我们就可以通过查找外部 jar 的适当部分来加载特定的嵌套条目。 我们不需要解压存档,也不需要将所有条目数据读入内存。spring-doc.cadn.net.cn

与标准 Java“JarFile”的兼容性

Spring Boot Loader 努力与现有代码和库保持兼容。NestedJarFileJarFile并且应该可以作为直接替代品。spring-doc.cadn.net.cn

格式为jar:nested:/path/myjar.jar/!BOOT-INF/lib/mylib.jar!/B.class并打开兼容的连接JarURLConnection. 这些可以与 Java 的URLClassLoader.spring-doc.cadn.net.cn