A項目依賴B項目,B項目中存在@service等註解,在本地eclipse中運行A項目時可以正常掃描B項目的註解創建對象。
但經過打包後,B項目和A項目的目錄結構變成
+BOOT-INF
+classes
+lib
+META-INF
+org.springframework.boot.loader
B項目本身又作爲A項目BOOT-INF/lib下的jar包,A項目使用java -jar從入口啓動類啓動後無法掃描到B項目的註解,
且B項目中的lib也與A項目中的lib下jar包存在重複。
解決方法,在B項目的pom.xml文件中添加<classifier>exec</classifier>
這樣B項目編譯後target目錄下會產生兩個文件
B.jar B-exec.jar
其中B-exec.jar和之前的結構一樣
B.jar的目錄結構是非springboot編譯項目,只有B項目自身的文件
+META-INF
+com.B項目包名
配置文件....
這樣再對A項目打包後,A項目BOOT-INF/lib目錄下只會加入B.jar,實測啓動可以正常掃描到B項目中的註解
如果需要單獨執行B項目,只需執行B-exec.jar即可