一、springcloud中我們最常用的打包方式就是使用springboot的spring-boot-maven-plugin進行打包,但是這樣存在一個問題,如下:
問題1:打包錯誤:我們想要公有的打包方式,一般直接把spring-boot-maven-plugin放在最頂層的pom.xml文件中。這樣會導致一個問題
父pom.xml中加入
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
這個問題導致的原因就是common中的打包問題,在common中是沒有main的,但是我們通過springboot的maven插件打包就存在上圖的問題。
問題2:公共模塊問題:問題1產生的主要原因還是common中引用了父pom.xml的依賴,加上本身沒有main的問題導致打包一直報錯。
二、解決
1、我在網上找了很多教程都是在common中加入執行為exec的方式,或者通過配置main.class來實現。但是這種基本上沒有太大的效果(個人實踐,可能存在差異)。
2、尋找問題:首先我們先找到問題,問題是由於頂層pom.xml加入了springboot的maven插件,意思就是下面的所有模塊以springboot的maven插件的方式來進行打包的。這個是不合理的,在我們的common中只是用來做公共基礎的一些工具或者基礎開發的東西,這個根本不需要使用springboot的maven插件進行打包。那么思路來了放棄頂層的springboot的maven插件改成普通的編譯方式不就行了。
3、解決問題(最簡單的方式)
在頂層pom.xml中替換build為
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build>
在需要使用springboot的maven插件的項目中加入
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
4、注意:此方式只適合點擊頂層打包的方式,如果在具體的web中加入了common模塊,那么打包還是存在問題,原理同第2點。