springboot多包工程,在使用maven進(jìn)行打包的時候,一直提示“程序包xxx不存在,找不到符號”,但項(xiàng)目是可以正常啟動運(yùn)行的,開始一直以為是maven哪里沒有配置好導(dǎo)致的,后來才發(fā)現(xiàn)原來是springboot的maven插件導(dǎo)致的。
項(xiàng)目結(jié)構(gòu):
xxx-parent:頂級父工程
xxx-a:子項(xiàng)目1
xxx-b:子項(xiàng)目2
xxx-c:子項(xiàng)目3
依賴關(guān)系:
a -> b -> c,從左到右,依次被依賴(c依賴b,b依賴a)
問題場景:
在使用mvn package的時候,一直提示“程序包xxx不存在,找不到符號”,開始以為是依賴的上層包沒打好,仔細(xì)檢查后發(fā)現(xiàn)都沒問題,就算將本地倉庫中的依賴包清理之后,重新install打包也還是有這個問題
原因分析:
因?yàn)橹暗膕pringmvc出現(xiàn)過類似的問題(Maven打包失敗,提示“找不到符號”),所以一開始也以為是本地倉庫的緩存所致,浪費(fèi)了好長時間,后來才發(fā)現(xiàn)原來是springboot自身的編譯插件spring-boot-maven-plugin導(dǎo)致的。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如上,就是springboot的maven插件,用這個插件打包的Jar包可以直接運(yùn)行,但是不可依賴!
解決方案(三選一):
1、不要將此插件放到頂級父工程中,在需要打成可執(zhí)行jar的地方添加就好了,如果是需要被依賴的,就不要添加此插件(如上述案例中,就是xxx-a、xxx-b不加,xxx-c需要加);
2、在需要對外提供依賴的項(xiàng)目的pom里設(shè)置(如本項(xiàng)目的xxx-a、xxx-b),這樣設(shè)置會讓項(xiàng)目生成兩個jar:一個可執(zhí)行jar,一個可依賴的jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 生成可執(zhí)行的jar的名字:xxx-exec.jar -->
<!-- 不固定,寫成abcd都可以 -->
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
3、在configuration中加入skip標(biāo)簽,取消生成可執(zhí)行jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
最后給大家贈送一本書籍《深入淺出Spring Boot》需要的朋友可以來私信我領(lǐng)取
篇幅有限就不過多的介紹了需要私信我就ok了
書籍免費(fèi)獲取方式:關(guān)注然后簡信“資料”即可獲得文檔領(lǐng)取方式
同時希望大家領(lǐng)到之后不要做收藏黨!而是能夠花一些時間認(rèn)真看完文檔,讓它真正發(fā)揮出價值來。