Spring Boot項目啟動時如何正確加載外部JAR包?

spring boot項目啟動時如何加載外部jar包?

在構建一個復雜的spring boot應用時,為了滿足不同客戶的需求并提高代碼的可維護性,常常需要將項目拆分成多個模塊,每個模塊打包成獨立的jar包。本文將討論如何在一個主spring boot項目啟動時,動態加載這些外部的jar包。

文中提到了一個場景:一個spring boot項目用于掃描二維碼查詢信息,支持樹、道路、物品等多種類型。為了解耦,將核心功能模塊打包成一個jar包,提供基礎服務,而不同類型的信息處理則分別打包成獨立的jar包。部署時,只需要加載對應類型的jar包即可。

嘗試了幾種加載外部jar包的方法,例如使用Java -xbootclasspath/a、java -djava.ext.dirs和java -dloader.path,但都未能成功。java -xbootclasspath/a:file:./libs -jar main.jar 命令并沒有加載libs目錄下的jar包;而使用java -djava.ext.dirs 和 java -dloader.path 則導致啟動異常,提示找不到主類。

問題的關鍵在于-jar 參數的使用。-jar 參數會直接指定運行的jar包,并忽略-classpath 或 -cp 參數。因此,需要繞過-jar參數,直接指定主類和classpath。

正確的啟動命令如下:

java -classpath './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher # or java -cp './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher

這里,./libs* 代表libs目錄下所有jar包,main.jar 是主spring boot應用的jar包。org.springframework.boot.loader.launch.jarlauncher 是spring boot打包后的jar包的實際主類。 通過這種方式,可以成功加載libs目錄下的所有jar包,并運行spring boot應用。 需要注意的是,這種方法需要明確指定spring boot應用的啟動類。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享