このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Boot 3.5.7 を使用してください! |
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) で使用できます。