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