idea工具(1):依赖包详解
1、如何導包
idea 中導包,分為兩種,pom 文件導包和手動導包,這里說一下如何 pom 文件導包。
1.1 Maven 倉庫
首先,百度 maven,找到對應的倉庫(repository)官方網站:
輸入包名,點進去,就可以看到:
選好版本:
復制粘貼就可以。
1.2 百度包名
直接百度包名,一般也會有熱心網友給出帖子,這個時候就需要更改一下版本了。
1.3 手動導包
File——Project Structure,或者快捷鍵:Ctrl+shift+Alt+S
2、導入的包在本地哪里?
打開 file——settings,找到 maven:
如上圖所示,可以看到 maven 的本地倉庫(這個是默認倉庫),當然可以自己更換位置(建議不要修改,因為之前項目拉取的各種依賴包都在這里,換了位置下一個項目加入依賴還要重新下載):
上面 repository 就是倉庫的意思,這個是 maven 的本地倉庫,對應的每個 idea 項目中也有一個包庫,其中引用的就是 maven 倉庫里面的包。
那么如何找包呢?比如找下面的包:
首先,找到 maven 倉庫位置,然后找到 io 文件夾,再找 netty:
3、pom 文件與 idea 界面中左右兩側的依賴包
在 idea 中,可以看到,左右兩側都有 dependency,其中左側表示的是項目所用到的去重后的所有依賴包。
為什么要去重呢,因為每個 dependency 往往需要依賴其他的包,如果添加的依賴比較多,那么依賴包 A 需要大量的其他依賴包,這就會導致很多依賴包重復依賴。
與 pom 文件息息相關的是右側的 dependencies,每當 pom 文件導入一個依賴包,右側的 dependencies 就會增加一個,如下圖所示:
藍色框的依賴包和紅色框的依賴包導入語句是一樣的,只不過 breeze-macros 是需要依賴包的,將其展開就是其所需要的依賴包,所以很多時候你會發現,pom 文件中導入的依賴包很少,但是倉庫中確有很多依賴包,這是因為一個依賴包需要很多其他依賴包才能執行。就好像你要閱讀一篇英文金融論文,你需要的技能可能會包括:英文、閱讀理解、金融基礎等等,這些技能就是閱讀該論文所需要的依賴。
打開本地 maven 倉庫中其中一個包,里面有一個文件就記錄了其依賴包:
添加一個依賴的,基本流程是:
在上圖中,將 breeze-macros_2.11 展開后,其下部分便是其所需依賴包,其中暗淡藍色框部分是與項目中的依賴包重復部分,可以看到每行后面括號里說明了原因,與什么什么包相矛盾或者是出現了兩個。
可以看到,這時候,其展開后展示的是該依賴包的源代碼,而不再是其所需的其他依賴包,因為其他依賴包是和它在同一級目錄中。
承接上面第一步,idea中到底存不存在依賴包:
之前,以為本地的maven倉庫是一個公共的依賴庫,無論你的idea項目是否存在都不會影響它,所有給我一個錯覺——idea項目和本地maven倉庫關系不大,當導入依賴的時候,idea會從本地倉庫復制依賴包到項目中,但是事實上這是錯誤的,因為本地的maven倉庫就是idea項目的一部分,只是可能多個idea項目會同時用的這個倉庫才會給我這種錯覺,我之前的想法是maven倉庫在idea項目之外,那么idea每次運行都要調用maven倉庫的jar包多麻煩啊,為什么不直接復制到idea目錄下,現在想想自己走入了一個誤區,對于計算機來說無論是maven倉庫還是idea目錄下調用起來都是一樣的,其路徑只是一個字符串罷了,不存在距離遠近。
4、報錯:程序包找不到怎么辦?
新拿來一個項目通常就會遇到這樣的問題,依賴包不存在,其解決步驟,我總結分為如下幾步,一步步來,肯定可以解決。
4.1 第一步:更新依賴包
一般情況下,打開 maven,然后點擊 clean(刪除之前編譯過的文件),然后直接點擊 Maven 中的更新依賴包即可:
當然,如果不想手動更新,可以設置自動更新,file-Setting:
選擇 import maven projects automalically(本質是默認自動更新),應用之后,只要我們更改了 pom 文件,就會自動更新依賴包,并且不會再出現導入提示框:
個人建議還是不要選擇這個,因為有時候改動 pom 文件的時候,還沒有改完就開始自動更新了,一點也不智能,還是人為控制比較好。
4.2 第二步:始終更新快照
不過,有時候有時 reimport 也解決不了問題,出現大量紅色下劃線,還有報錯:
Cannot resolve nz.ac.waikato.cms.weka:weka-stable:3.8.5
這時候要用另外一種方法:file——setting:
這里說一下,Always update snapshots 是始終更新快照的意思。
什么是快照?
maven 倉庫一般分為兩個倉庫:public(Release)倉庫和 SNAPSHOT 倉,前者存放正式版本,后者存放快照版本。快照版本會不斷更新迭代(新功能會有 bug,不斷更改),迭代多次之后穩定了,就會形成一個新的正式版本。
選擇 Always update snapshots 與不選的區別?
個人認為,如果不勾選 Always update snapshots,那么在 maven 服務器上拉取依賴包的時候,都是自動默認拉取正式版本的依賴包;但是如果勾選了,則會去查看依賴包的對應快照版本,并且會定期去看快照版本有沒有進更新。
為什么勾選了 Always update snapshots 能夠一定程度解決 reimport 解決不了的問題?
原因可能有兩個,一個是當前穩定版本存在 bug,而下載快照后可以解決(概率較小);較大的概率是因為 reimport 時,因為網速原因下載了一部分就停止了,而 maven 掃描到本地倉庫存在該依賴包(殘缺),就不會下載,這時候突然下載快照版本,替換了原來的殘缺版本,所以就可以了。
要不要勾選 Always update snapshots
個人認為,如果只是單純為了解決依賴包問題,可以先勾選,解決完了就不勾選;因為快照版本是可能存在一定 bug 的,它不斷進行更新,萬一這一版本的依賴包存在問題,你的程序就可能崩了;而且不斷更新會浪費一定的時間和帶寬。
4.3 第三步:刪除依賴包,重新下載
還有的時候,是下載依賴沒有下載完全,但是你 reimport 的時候,程序發現已經存在(不會斷點重傳),這個時候需要到 C:\Users\當前用戶名.m2\repository 庫中去刪除那個包,然后重新下載,這個會解決一部分問題。
4.4 第四步:導入成功了,但是依然報錯找不到包
如果導入成功了,但是報錯找不到包如下:
這時候點擊項目右鍵,找到:open module setting:
如上圖,根據箭頭,找到所在項目的所在包,可發行其 Scope(也就是這個包可執行范圍)是 Test,也就是說這個包只有在進行測試的時候,才會發揮作用;而我們現在要在運行的時候也要讓其發揮作用,則要將 Test 改為 Compile(編譯)。
OK,今天就到這里,更多精彩內容關注我的個人網站:藍亞之舟博客。
總結
以上是生活随笔為你收集整理的idea工具(1):依赖包详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拟合函数
- 下一篇: PropertyUtils的使用