<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          悲劇!IDEA 突然找不到類了?

          共 3002字,需瀏覽 7分鐘

           ·

          2021-08-05 23:22


          Hello,大家好

          我們本地使用 IDEA 運(yùn)行 maven 項(xiàng)目的時(shí)候,有時(shí)候運(yùn)氣不好,就會(huì)遇到某些 maven 依賴無法正常找到、導(dǎo)入。這就會(huì)導(dǎo)致 IDEA  構(gòu)建項(xiàng)目的時(shí)候爆出一堆醒目的紅色 Error。

          圖片來自網(wǎng)絡(luò)

          那最近小黑哥新拉取一個(gè)項(xiàng)目源碼,本地運(yùn)行項(xiàng)目,又碰到這種情況。按照以前的解決經(jīng)驗(yàn),搗鼓了一下,發(fā)現(xiàn)沒辦法解決。于是研究了一下午,終于解決這個(gè)問題??。

          吐槽一下,剛開始一度以為是這個(gè)項(xiàng)目有問題,找了一個(gè)同事,發(fā)現(xiàn)他的電腦是卻可以正常運(yùn)行這個(gè)項(xiàng)目。

          那今天這篇的文章,總結(jié)一下 IDEA 運(yùn)行 maven 項(xiàng)目找不到相關(guān)依賴報(bào)錯(cuò)的問題原因以及解決辦法。

          網(wǎng)絡(luò)問題,無法下載 maven 依賴

          Maven 默認(rèn)的中央倉庫地址為 http://search.maven.org/#browse,那這是一個(gè)外網(wǎng)的地址。

          而我們國內(nèi)訪問外網(wǎng)地址,網(wǎng)絡(luò)速度不僅慢,網(wǎng)絡(luò)質(zhì)量還差。這就導(dǎo)致了maven 依賴下載速度過慢,有時(shí)候下載還可能會(huì)失敗。

          maven 依賴下載失敗,這就會(huì)導(dǎo)致 IDEA 找不到相關(guān)依賴。

          那這個(gè)問題解決辦法也比較簡(jiǎn)單,我們可以通過設(shè)置鏡像(mirrors)地址解決。

          打開我們本地 maven 配置文件,默認(rèn)地址如下:${user.home}/.m2/settings.xml,然后找到 mirrors節(jié)點(diǎn),在這下面添加以下配置:

          <mirrors>
              <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>        
              </mirror>
          </mirrors>

          lastUpdated 文件導(dǎo)致依賴無法正常導(dǎo)入

          當(dāng)你更新鏡像地址之后,有可能還會(huì)碰到 maven 依賴無法導(dǎo)入,那恭喜你碰到第二個(gè)問題了。

          maven 依賴下載的時(shí)候,如果碰到網(wǎng)絡(luò)較差,依賴下載失敗,maven 本地將會(huì)生成 lastUpdated 為后綴的文件。

          img

          那正常的 maven 依賴如下

          lastUpdated 為后綴的文件作用如下:

          只要 lastUpdated 文件存在,maven 依賴將不會(huì)重新下載,所以做簡(jiǎn)單的方法就是,刪除 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 依賴沖突,引用錯(cuò)誤

          前兩個(gè)問題主要跟本地網(wǎng)絡(luò)有比較大的關(guān)系,那這個(gè)問題,主要是因?yàn)?maven 特性導(dǎo)致。

          那 maven 有一個(gè)依賴傳遞的特性,如果 A 依賴 B,而 B 依賴 C,那么 C 這個(gè)依賴就會(huì)通過 B 間接傳遞給 A。

          那如果有多個(gè)間接依賴存在,但是彼此版本卻不一樣,這就會(huì)導(dǎo)致依賴沖突

          如上所示,如果 A 應(yīng)用 使用了 E2.0 新增某些類或者方法,那這個(gè)時(shí)候由于依賴沖突,A 實(shí)際上間接依賴的是 E1.0,這就導(dǎo)致 IDEA 編譯的時(shí)候找不到 E 新增這些類或方法。

          那這個(gè)問題解決辦法,也比較簡(jiǎn)單,有沖突,我們就直接解決沖突就可以了。

          我們可以在 IDEA 中安裝一個(gè) Maven Helper 插件,然后打開 pom 文件,點(diǎn)擊 Dependency Analyzer 選項(xiàng),在這里面選中 Conflicts 按鈕,就可以看到當(dāng)前所有沖突的依賴包。

          選中其中一個(gè)依賴包,就可以在右側(cè)看到所有沖突依賴包的版本。選中其中一個(gè)版本,右鍵選中 Exclude 即可。

          上面的辦法我們通過排除其他間接依賴從而解決問題。那下面還有一種解決辦法,將間接依賴轉(zhuǎn)化為直接依賴。

          我們可以把間接依賴直接寫在項(xiàng)目 pom 文件里,這樣 maven 將會(huì)直接使用這個(gè)依賴,其他間接依賴將會(huì)失效。

          maven 間接依賴異常

          這個(gè)問題,就比較詭異,這也是文章剛開頭提到那個(gè)問題。

          項(xiàng)目中依賴關(guān)系如下所示。

          A 應(yīng)用依賴 B ,那 B 是一個(gè)開源項(xiàng)目,但是公司內(nèi)部對(duì) B 進(jìn)行一些修改。修改之后, B 依賴 C ,所以 A 中使用 C 依賴某些類。

          那由于我本地倉庫已經(jīng)下載了 B 開源版本,那當(dāng)我本地拉取 A 應(yīng)用源碼,那依賴關(guān)系就變成了 圖中虛線關(guān)系。

          IDEA 缺失了 C 依賴,這就導(dǎo)致項(xiàng)目編譯錯(cuò)誤,無法找到 C 中一些類。

          那這個(gè)問題解決辦法,就是在本地倉庫找到 B 依賴,然后刪除拉取即可。

          解決辦法比較簡(jiǎn)單,關(guān)鍵我們需要找到中間這個(gè)依賴。

          IDEA 本地緩存異常

          最后一種情況,跟 IDEA 有比較大關(guān)系。

          IDEA 之所以快,那是因?yàn)?IDEA 打開新的工程的時(shí)候,它會(huì)構(gòu)建項(xiàng)目索引以及生成相關(guān)緩存。

          那有時(shí)候,如果 IDEA 緩存被破壞,那就有可能導(dǎo)致 IDEA 無法識(shí)別 maven 依賴, 從而導(dǎo)致 IDEA 無法找到某些類。

          這種情況我們需要?jiǎng)h除原先的緩存以及索引,等待 IDEA 重新構(gòu)建緩存以及索引即可。

          在 IDEA 中點(diǎn)擊 File/Invalidate Cached 即可。

          最后

          如果你如果碰到新的情況,以上幾種解決辦法都沒辦法解決,那么只能使用終極解決辦法。

          重啟大法,重啟 IDEA,重啟電腦


          瀏覽 90
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爆乳一区二区 | 国产精品伦 | 亚洲高清毛片一区二区 | 亚洲中文大香蕉 | 中文字幕亚洲在线观看 |