新聞中心
本文轉(zhuǎn)載自微信公眾號「小黑十一點半」,作者樓下小黑哥 。轉(zhuǎn)載本文請聯(lián)系小黑十一點半公眾號。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供西平網(wǎng)站建設(shè)、西平做網(wǎng)站、西平網(wǎng)站設(shè)計、西平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、西平企業(yè)網(wǎng)站模板建站服務(wù),10年西平做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
Hello,大家好,我是樓下小黑哥~
我們本地使用 IDEA 運行 maven 項目的時候,有時候運氣不好,就會遇到某些 maven 依賴無法正常找到、導(dǎo)入。這就會導(dǎo)致 IDEA 構(gòu)建項目的時候爆出一堆醒目的紅色 Error。
圖片來自網(wǎng)絡(luò)
那最近小黑哥新拉取一個項目源碼,本地運行項目,又碰到這種情況。按照以前的解決經(jīng)驗,搗鼓了一下,發(fā)現(xiàn)沒辦法解決。于是研究了一下午,終于解決這個問題??。
吐槽一下,剛開始一度以為是這個項目有問題,找了一個同事,發(fā)現(xiàn)他的電腦是卻可以正常運行這個項目。
那今天這篇的文章,總結(jié)一下 IDEA 運行 maven 項目找不到相關(guān)依賴報錯的問題原因以及解決辦法。
網(wǎng)絡(luò)問題,無法下載 maven 依賴
Maven 默認的中央倉庫地址為 http://search.maven.org/#browse,那這是一個外網(wǎng)的地址。
而我們國內(nèi)訪問外網(wǎng)地址,網(wǎng)絡(luò)速度不僅慢,網(wǎng)絡(luò)質(zhì)量還差。這就導(dǎo)致了maven 依賴下載速度過慢,有時候下載還可能會失敗。
maven 依賴下載失敗,這就會導(dǎo)致 IDEA 找不到相關(guān)依賴。
那這個問題解決辦法也比較簡單,我們可以通過設(shè)置鏡像(mirrors)地址解決。
打開我們本地 maven 配置文件,默認地址如下:${user.home}/.m2/settings.xml,然后找到 mirrors節(jié)點,在這下面添加以下配置:
alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
lastUpdated 文件導(dǎo)致依賴無法正常導(dǎo)入
當你更新鏡像地址之后,有可能還會碰到 maven 依賴無法導(dǎo)入,那恭喜你碰到第二個問題了。
maven 依賴下載的時候,如果碰到網(wǎng)絡(luò)較差,依賴下載失敗,maven 本地將會生成 lastUpdated 為后綴的文件。
那正常的 maven 依賴如下
lastUpdated 為后綴的文件作用如下:
只要 lastUpdated 文件存在,maven 依賴將不會重新下載,所以做簡單的方法就是,刪除 lastUpdated 文件,重新刷新下載即可。
這里提供一鍵刪除 lastUpdated 文件腳本(macos)
- # 這里寫你的倉庫路徑
- REPOSITORY_PATH=~/.m2/repository
- echo 正在搜索...
- find $REPOSITORY_PATH -name "*lastUpdated*" | xargs rm -fr
- echo 搜索完
windows 腳本如下:
- # windows腳本
- @echo off
- rem create by NettQun
- rem 這里寫你的倉庫路徑
- set REPOSITORY_PATH=D:\Java\maven-repository\maven-aliyun\repository
- rem 正在搜索...
- for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
- echo %%i
- del /s /q "%%i"
- )
- rem 搜索完畢
- pause
maven 依賴沖突,引用錯誤
前兩個問題主要跟本地網(wǎng)絡(luò)有比較大的關(guān)系,那這個問題,主要是因為 maven 特性導(dǎo)致。
那 maven 有一個依賴傳遞的特性,如果 A 依賴 B,而 B 依賴 C,那么 C 這個依賴就會通過 B 間接傳遞給 A。
那如果有多個間接依賴存在,但是彼此版本卻不一樣,這就會導(dǎo)致依賴沖突。
如上所示,如果 A 應(yīng)用 使用了 E2.0 新增某些類或者方法,那這個時候由于依賴沖突,A 實際上間接依賴的是 E1.0,這就導(dǎo)致 IDEA 編譯的時候找不到 E 新增這些類或方法。
那這個問題解決辦法,也比較簡單,有沖突,我們就直接解決沖突就可以了。
我們可以在 IDEA 中安裝一個 Maven Helper 插件,然后打開 pom 文件,點擊 Dependency Analyzer 選項,在這里面選中 Conflicts 按鈕,就可以看到當前所有沖突的依賴包。
選中其中一個依賴包,就可以在右側(cè)看到所有沖突依賴包的版本。選中其中一個版本,右鍵選中 Exclude 即可。
上面的辦法我們通過排除其他間接依賴從而解決問題。那下面還有一種解決辦法,將間接依賴轉(zhuǎn)化為直接依賴。
我們可以把間接依賴直接寫在項目 pom 文件里,這樣 maven 將會直接使用這個依賴,其他間接依賴將會失效。
maven 間接依賴異常
這個問題,就比較詭異,這也是文章剛開頭提到那個問題。
項目中依賴關(guān)系如下所示。
A 應(yīng)用依賴 B ,那 B 是一個開源項目,但是公司內(nèi)部對 B 進行一些修改。修改之后, B 依賴 C ,所以 A 中使用 C 依賴某些類。
那由于我本地倉庫已經(jīng)下載了 B 開源版本,那當我本地拉取 A 應(yīng)用源碼,那依賴關(guān)系就變成了 圖中虛線關(guān)系。
IDEA 缺失了 C 依賴,這就導(dǎo)致項目編譯錯誤,無法找到 C 中一些類。
那這個問題解決辦法,就是在本地倉庫找到 B 依賴,然后刪除拉取即可。
解決辦法比較簡單,關(guān)鍵我們需要找到中間這個依賴。
IDEA 本地緩存異常
最后一種情況,跟 IDEA 有比較大關(guān)系。
IDEA 之所以快,那是因為 IDEA 打開新的工程的時候,它會構(gòu)建項目索引以及生成相關(guān)緩存。
那有時候,如果 IDEA 緩存被破壞,那就有可能導(dǎo)致 IDEA 無法識別 maven 依賴, 從而導(dǎo)致 IDEA 無法找到某些類。
這種情況我們需要刪除原先的緩存以及索引,等待 IDEA 重新構(gòu)建緩存以及索引即可。
在 IDEA 中點擊 File/Invalidate Cached 即可。
最后
如果你如果碰到新的情況,以上幾種解決辦法都沒辦法解決,那么只能使用終極解決辦法。
重啟大法,重啟 IDEA,重啟電腦
當前文章:悲?。DEA突然找不到類了?
分享URL:http://www.dlmjj.cn/article/djppsdd.html


咨詢
建站咨詢
