Spring Boot 的“NestedJarFile” 类

用于支持加载嵌套jar的核心类为嵌套JarFile. 它允许你从嵌套的子jar数据加载jar内容。 首次加载时,每个人的位置JarEntry映射到外罐的物理文件偏移量,如下示例所示: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级可以在/BOOT-INF/类myapp.jar位置0063.B级嵌套罐子实际上可以在myapp.jar位置3452C级位于位置3980.spring-doc.cadn.net.cn

掌握这些信息后,我们可以通过寻找外部罐子的相应部分来加载特定的嵌套条目。 我们不需要解压档案,也不需要将所有录入数据读入内存。spring-doc.cadn.net.cn

与标准 Java “JarFile” 的兼容性

Spring Boot Loader 力求与现有代码和库保持兼容。嵌套JarFileJarFile并且应该可以作为临时替换使用。spring-doc.cadn.net.cn

嵌套的JAR URL格式如下jar:nested:/path/myjar.jar/!BOOT-INF/lib/mylib.jar!/B.class支持并开启与JarURLConnection. 这些可以与 Java 一起使用URLClassLoader.spring-doc.cadn.net.cn