idea Maven Springboot多模塊項(xiàng)目打包時(shí)90%的問(wèn)題及解決方案
1. 前言
之所以寫這篇文章是因?yàn)樵谑褂肕aven的過(guò)程中遇到了許多問(wèn)題,在這里作為記錄總結(jié)
2. 問(wèn)題
使用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文件使用記事本打開(kāi)
#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)槟銢](méi)有對(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注解之超越Javadoc的元數(shù)據(jù)利器詳解
本文將深入探討 Java 注解的定義、類型、內(nèi)置注解、自定義注解、保留策略、實(shí)際應(yīng)用場(chǎng)景及最佳實(shí)踐,無(wú)論是初學(xué)者還是資深開(kāi)發(fā)者,都能通過(guò)本文了解如何利用注解提升代碼質(zhì)量和開(kāi)發(fā)效率2025-05-05
SpringMVC訪問(wèn)靜態(tài)資源的三種方式小結(jié)
這篇文章主要介紹了SpringMVC訪問(wèn)靜態(tài)資源的三種方式小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Spring Boot @Conditional注解使用示例詳解
在SpringBoot中,@Conditional注解用于條件性地注冊(cè)bean,根據(jù)某些條件決定是否創(chuàng)建特定bean,可以實(shí)現(xiàn)Condition接口并重寫matches方法來(lái)定義條件,本文介紹Spring Boot @Conditional注解的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-12-12
IDEA報(bào)錯(cuò):無(wú)效的源發(fā)行版解決方案
很多小伙伴在刷新maven的時(shí)候總會(huì)報(bào) Error:java:無(wú)效的源發(fā)行版,下面這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò):無(wú)效的源發(fā)行版的解決方案,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
SpringSecurity中的表單認(rèn)證詳細(xì)解析
這篇文章主要介紹了SpringSecurity中的表單認(rèn)證詳細(xì)解析,在上一篇文章中,我們初步引入了?Spring?Security,并使用其默認(rèn)生效的?HTTP?基本認(rèn)證保護(hù)?URL?資源,在本篇文章中我們使用表單認(rèn)證來(lái)保護(hù)?URL?資源,需要的朋友可以參考下2023-12-12
Java黑科技之通過(guò)Google Java Style 文件配置IDEA和Ecplise代碼風(fēng)格
在日常開(kāi)發(fā)中,多人團(tuán)隊(duì)協(xié)作開(kāi)發(fā)一個(gè)項(xiàng)目是很常見(jiàn)的,特別是大公司,這就會(huì)涉及到多人在一個(gè)工程上開(kāi)發(fā)代碼.無(wú)規(guī)矩不成方圓,一個(gè)好的代碼風(fēng)格,更加有利于團(tuán)隊(duì)協(xié)作,減少代碼沖突,提高代碼可閱讀性,美觀性.本文就帶著大家仔細(xì)研究這個(gè)黑科技 ,需要的朋友可以參考下2021-05-05
SpringBoot中MyBatis使用自定義TypeHandler的實(shí)現(xiàn)
本文主要介紹了SpringBoot中MyBatis使用自定義TypeHandler,當(dāng)默認(rèn)的類型映射不能滿足需求時(shí),自定義?TypeHandler?就非常有用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
JavaWeb請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求包含實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了JavaWeb請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求包含實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
EL表達(dá)式簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
EL全名為Expression Language,這篇文章主要給大家介紹EL表達(dá)式的主要作用及內(nèi)容簡(jiǎn)介,感興趣的朋友一起看看2017-07-07
java面向?qū)ο笾畬W(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java面向?qū)ο笾畬W(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

