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