Spring Boot の "NestedJarFile" クラス

ネストされた jar の読み込みをサポートするために使用されるコアクラスは NestedJarFile (Javadoc) です。これにより、ネストされた子 jar データから jar コンテンツを読み込むことができます。最初に読み込まれると、各 JarEntry (標準 Javadoc) の場所は、次の例に示すように、外側の jar の物理ファイルオフセットにマップされます。

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

上記の例は、0063 の myapp.jar の /BOOT-INF/classes で A.class を見つける方法を示しています。ネストされた jar からの B.class は、実際には myapp.jar の位置 3452 にあり、C.class は位置 3980 にあります。

この情報を使用して、外部 jar の適切な部分をシークすることにより、特定のネストされたエントリをロードできます。アーカイブを解凍する必要はなく、すべてのエントリデータをメモリに読み込む必要もありません。

標準 Java "JarFile" との互換性

Spring Boot Loader は、既存のコードおよびライブラリとの互換性を維持するよう努めています。NestedJarFile (Javadoc) JarFile (標準 Javadoc) から拡張されており、ドロップイン置換として機能するはずです。

jar:nested:/path/myjar.jar/!BOOT-INF/lib/mylib.jar!/B.class 形式のネストされた JAR URL がサポートされており、JarURLConnection (標準 Javadoc) と互換性のある接続を開きます。これらは Java の URLClassLoader (標準 Javadoc) で使用できます。