springboot多包工程,在使用maven進行打包的時候,一直提示“程序包xxx不存在,找不到符號”,但項目是可以正常啟動運行的,開始一直以為是maven哪里沒有配置好導致的,后來才發現原來是springboot的maven插件導致的。
項目結構:
xxx-parent:頂級父工程
xxx-a:子項目1
xxx-b:子項目2
xxx-c:子項目3
依賴關系:
a -> b -> c,從左到右,依次被依賴(c依賴b,b依賴a)
問題場景:
在使用mvn package的時候,一直提示“程序包xxx不存在,找不到符號”,開始以為是依賴的上層包沒打好,仔細檢查后發現都沒問題,就算將本地倉庫中的依賴包清理之后,重新install打包也還是有這個問題
原因分析:
因為之前的springmvc出現過類似的問題(Maven打包失敗,提示“找不到符號”),所以一開始也以為是本地倉庫的緩存所致,浪費了好長時間,后來才發現原來是springboot自身的編譯插件spring-boot-maven-plugin導致的。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如上,就是springboot的maven插件,用這個插件打包的Jar包可以直接運行,但是不可依賴!
解決方案(三選一):
1、不要將此插件放到頂級父工程中,在需要打成可執行jar的地方添加就好了,如果是需要被依賴的,就不要添加此插件(如上述案例中,就是xxx-a、xxx-b不加,xxx-c需要加);
2、在需要對外提供依賴的項目的pom里設置(如本項目的xxx-a、xxx-b),這樣設置會讓項目生成兩個jar:一個可執行jar,一個可依賴的jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 生成可執行的jar的名字:xxx-exec.jar -->
<!-- 不固定,寫成abcd都可以 -->
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
3、在configuration中加入skip標簽,取消生成可執行jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip> </configuration> </plugin> </plugins> </build>
轉至:https://www.jiweichengzhu.com/article/9119217ea198412f85477c9fdef6a080