關(guān)于maven工程多模塊、項目打包問題
1、在同一父工程下的情況
(1)找到主類,主類就是你要運行那個作為啟動類就是主類,就在主類的pom里加上如下配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
# 下面幾行不重要,重要的是上面2行
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>(2)這個主類你依賴了其它模塊
<dependency>
<groupId>com.cdyx</groupId>
<artifactId>medica-auth</artifactId>
<version>1.0.0</version>
</dependency>那么子模塊的,這個medica-auth模塊的pom的build啥也不加,因為spring-boot-maven-plugin的原理就是打成可運行jar包,
可運行jar包就是如圖這樣的,帶BOOT-INF。注意這種文件要是你的子模塊也打成了BOOT,那么主類啟動是掃描不到的,
因為springboot是掃描的com.什么什么的,和你配置的包掃描是沖突的


最后,以此類推,有多少子模塊就這樣設(shè)置,最后package就行了
2、不在同一父工程下的情況
(就是分開的2個項目,2個有父工程的,坑就是這種一個項目打包另外一項目,另外一項目的包都是帶BOO-INF的),當你想這個工程引入另外父工程下的子模塊時。
- 第一個項目

- 第二個項目

當你第2個項目想依賴第1個項目的子模塊項目時

打出來的包是這樣的

# 上面這是個大坑,因為你第二個項目跑起來,他是掃描不到這個子模塊的bean的
解決辦法
(1)去第1個 項目的子模塊的pom里加這個, true意思是打成class,不打成BOO-INF
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>(2)把這個包單獨打出來放在你要跑的第2個項目的的資源里路徑里

(3)在對第2個項目進行打包時,把這個通過系統(tǒng)路徑方式導入進來,在pom里加
<dependency>
<groupId>com.XXX</groupId>
<artifactId>XXXXX</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/medica-auth-1.0.0.jar</systemPath>
</dependency>這樣,再 次打包之后項目是這樣的

其實意思就是你要想辦法把包路徑搞成com.xx.xxx,同級的。假如這個XXXXX的jar包又依賴了他自己父工程下的其它自己開發(fā)的坐標(沒事,把其它2個打成依賴和它放這同一級目錄即可)
補充
還有一點就是,在maven中,假如A依賴B, B依賴C, A項目直接依賴B的坐標,打包生成的A包,那么A項目會導2次C,假如C中有注入Bean,就容易發(fā)生循環(huán)依賴或者依賴沖突,因為注入了不止一個實例。
可以用下面的方式在A的pom里排一次C的依賴,那么在A的lib里就不會再有C,而只讓B里有C,但是這種只限于C是單純的沒有注入bean的情況,假如有注入bean的注解,放B里去了,那么A是掃不到C的,一般不會套這種2層結(jié)構(gòu),只是今天遇到了。
一般還是項目的父工程和子模塊不要搞相互依賴的情況,直接寫一起不好嗎??。∶總€子模塊作為單獨功能單獨的服務才符合微服務的思想
#排除依賴
<dependency>
<groupId>com.cdyx</groupId>
<artifactId>medica-auth</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.cdyx</groupId>
<artifactId>medica-security</artifactId>
</exclusion>
</exclusions>
</dependency>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄
這篇文章主要介紹了SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08

