idea Maven Springboot多模塊項(xiàng)目打包時(shí)90%的問題及解決方案
1. 前言
之所以寫這篇文章是因?yàn)樵谑褂肕aven的過(guò)程中遇到了許多問題,在這里作為記錄總結(jié)
2. 問題
使用idea打包的時(shí)候編譯偶爾成功偶爾失敗,本地運(yùn)行能成功,有時(shí)能打包成功但是發(fā)現(xiàn)使用 jar 包跑的時(shí)候會(huì)出現(xiàn)類找不到的情況,最終經(jīng)過(guò)排查發(fā)現(xiàn)有部分的類打包的時(shí)候打包不進(jìn)去。
3. 解決辦法
關(guān)閉idea,找到對(duì)應(yīng)項(xiàng)目的目錄刪除 .idea 文件,讓 idea 去重構(gòu)項(xiàng)目
刪除 Maven 本地倉(cāng)庫(kù)下當(dāng)前項(xiàng)目的對(duì)應(yīng)的包,以 org.apache 為例,刪除該文件夾下的所有文件夾。

清除 本地Maven 倉(cāng)庫(kù)中下載失敗的jar 包
#1. 創(chuàng)一個(gè).bat文件使用記事本打開
#2. 修改路徑為maven本地倉(cāng)庫(kù)路徑
#3. 保存退出,雙擊執(zhí)行
set REPOSITORY_PATH=D:\xxxx\apache-maven-3.3.9\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
del /s /q %%i
)
rem 搜索完畢
pause
刷新maven本地倉(cāng)庫(kù),順便檢查一下 maven 配置和 maven 的jdk 配置


在idea中File -> settings -> -> Build,Execution -> Build Tools -> Maven -> repositories

重啟idea(當(dāng)然也可以選擇Reload,個(gè)人建議重啟idea),reload 有時(shí)會(huì)出現(xiàn)更新不上的情況。

重啟后,會(huì)發(fā)現(xiàn)可能有部分模塊引用了其它模塊的jar會(huì)報(bào)錯(cuò),這是正?,F(xiàn)象,這是因?yàn)槟銢]有對(duì)公共模塊進(jìn)行打包,導(dǎo)致引入了公共模塊的其它模塊報(bào)錯(cuò),但如果除了公共模塊之外還有其它的jar包還是報(bào)錯(cuò)這就得檢查一下maven 本地倉(cāng)庫(kù)是否下載成功了。
指定打包方式:
- 父項(xiàng)目指定打包方式為pom
- 公共模塊例如 common 、utils、Entity 這些模塊,建議打成jar包
- 可執(zhí)行模塊打成war 包
<! -- 具體指定打包方式,在pom文件的properties 上方添加: --> <packaging>pom</packaging> <packaging>jar</packaging> <packaging>war</packaging>

在可執(zhí)行模塊添加 springboot maven 打包插件,其它模塊無(wú)需添加,最好指定主類。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>xxx.xxx.mainClass</mainClass>
<cleanCache>true</cleanCache>
<sourceDirectory>src/main/java</sourceDirectory>
<fork>true</fork>
<addResources>true</addResources>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
在公共項(xiàng)目先進(jìn)行打包

所有公共項(xiàng)目全部打包之后需要Reload 一下,重新導(dǎo)入一下jar,導(dǎo)入之后,所有的如果導(dǎo)入成功就不會(huì)報(bào)錯(cuò)了,這里還是建議重啟,idea 有時(shí)會(huì)抽風(fēng)存在導(dǎo)入不成功的情況。
在父項(xiàng)目中執(zhí)行package打包

4. jar 包沖突
這里推薦一個(gè)插件,Maven Helper , 在idea setting 里面下載maven helper 插件。

下載后進(jìn)入pom.xml 文件,點(diǎn)擊Dependency Analyzer,就能看到項(xiàng)目中依賴的版本了,如果是沖突的jar 就會(huì)爆紅。

選擇爆紅的jar,鼠標(biāo)右擊選擇exclusion,就能排查沖突的依賴了,然后點(diǎn)擊 Reimport 和 Refresh UI,就能看到之前沖突的jar被排查了

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析
UDP實(shí)現(xiàn)通信非常簡(jiǎn)單,沒有服務(wù)器,每個(gè)都是客戶端,每個(gè)客戶端都需要一個(gè)發(fā)送端口和一個(gè)接收端口,本文給大家介紹Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析,感興趣的朋友一起看看吧2021-09-09
Java并發(fā)編程之線程池實(shí)現(xiàn)原理詳解
池化思想是一種空間換時(shí)間的思想,期望使用預(yù)先創(chuàng)建好的對(duì)象來(lái)減少頻繁創(chuàng)建對(duì)象的性能開銷,java中有多種池化思想的應(yīng)用,例如:數(shù)據(jù)庫(kù)連接池、線程池等,下面就來(lái)具體講講2023-05-05
Springboot集成Minio實(shí)現(xiàn)文件上傳基本步驟
這篇文章主要介紹了Springboot集成Minio實(shí)現(xiàn)文件上傳基本步驟,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-06-06
springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑
這篇文章主要介紹了springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
圖解Java經(jīng)典算法冒泡選擇插入希爾排序的原理與實(shí)現(xiàn)
冒泡排序是一種簡(jiǎn)單的排序算法,它也是一種穩(wěn)定排序算法。其實(shí)現(xiàn)原理是重復(fù)掃描待排序序列,并比較每一對(duì)相鄰的元素,當(dāng)該對(duì)元素順序不正確時(shí)進(jìn)行交換。一直重復(fù)這個(gè)過(guò)程,直到?jīng)]有任何兩個(gè)相鄰元素可以交換,就表明完成了排序2022-09-09

