Spring Bootのfat jarは依存ライブラリのjarを内包しているが、実行時に外部のjarを読み込むにはどうすればよいか記す。
あまり有ることではないが、ライブラリが環境毎に異なるjarを提供している場合などに使用する。
環境
- Java 8
- Spring Boot 2
- Gradle 4.7
設定方法
Executable Jarを起動するのにデフォルトではJarLauncherが使用され、jar内のBOOT-INF/lib/配下を見に行く。
実行時にクラスパス等を変更するには代わりにPropertiesLauncherを使う。
build.gradleの設定
bootJar {
manifest {
attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
}
}
loader.pathの指定
追加したいクラスパスをloader.pathプロパティで指定する。環境変数LOADER_PATHでもよい。
ありがたいことに、ディレクトリ指定もできて、jar or zipファイルを再帰的にスキャンしてくれる。
export LOADER_PATH=/develop
java -jar app.jar