IntelliJ IDEA 11導入依賴的問題
需要從subversion導入一個項目 – 這是一個maven項目。但是我在處理maven庫依賴時遇到了問題,這導致不能自動地包含所有的maven依賴項 – 當我打開該類時,IDEA顯示依賴錯誤。問題如下圖所示:
想讓所有的依賴關係被自動添加 – 這是否可行?還是說必須要通過所有的類文件來識別和添加maven依賴?
經過一些嘗試,做了一些修改之後,發現了解決上述問題的一種可行方式,如下圖所示:
但是,它不會提前引入和檢查新的依賴關係嗎?!…在intelliJ中是否有任何地方可以設置:自動導出依賴到classpath?
推薦的解決辦法
隻要POM兼容並且所有依賴關係可用,IntelliJ會自動將所有依賴項添加到項目的類路徑(classpath)中。
當將Maven項目導入IntelliJ時,通常會提示是否要為Maven項目配置自動導入(Auto-Import)。這意味著如果對POM做任何更改,這些更改也會自動加載。
可以按如下方式啟用此功能:進入文件>設置> Maven>導入
,有一個複選框,顯示“自動導入Maven項目”。
如果上述辦法無效,建議做一個完整的clean-up
並重新開始:
-
關閉項目窗口(和IntelliJ)並刪除所有的
*.iml
文件和所有的.idea
文件夾(每個模塊應該有一個) -
從命令行運行
mvn clean install
-
重新導入(Re-import)將項目引入IntelliJ,注意啟用自動導入(auto-import)的提示
針對IntelliJ 2016更新的不同細節處理:
導入Maven項目的自動設置功能已被移動到IntelliJ首選項的構建,執行,部署>構建工具> Maven>導入
中。
次佳解決辦法
解決方法是:到文件[菜單] – >設置 – > maven – >導入,取消選中“使用maven3導入項目”
參考:http://youtrack.jetbrains.com/issue/IDEA-98425(可能還有其他一些思路)
更新:對於IntelliJ 15,已經沒有“使用maven3導入”選項可用了。原因是有時IntelliJ“不能正確解析maven依賴關係”,亦即,如果不能解析其中的任意一個,它就會放棄所有這些依賴。可以通過打開maven項目工具窗口(查看菜單 – >工具Windows – > Maven項目)來判斷是否是這種情況。展開一個maven項目及其依賴項,如果依賴關係都以紅色加下劃線,那麽問題來了:
可以通過鼠標懸停在項目名稱上,可以看到真正的失敗原因。
在上麵的實例中,顯示“問題:沒有可用的XXX的版本”或“無法讀取artifact org.xy.z的描述符”,參考:https://youtrack.jetbrains.com/issue/IDEA-128846和https://youtrack.jetbrains.com/issue/IDEA-152555
問題在於,處理一個沒有關聯的pom文件的jar(在maven nexus repo中,也是本地存儲庫)。如果大家遇到了同樣的問題,“如果實際上不需要代碼中使用那個jar中的類(例如隻有一個傳遞性的maven依賴),那麽你實際上可以從pom 注釋掉該依賴(臨時),到maven項目重新加載,然後取消注釋。
第三種解決辦法
嘗試從IntelliJ IDEA的Maven Projects麵板中重新導入(Re-Import)項目。這應該會自動下載並配置pom.xml
中定義的所有依賴項。
如果由於某種原因在IDEA中下載不能正常工作,請從命令行嘗試mvn install
,看看是否可以獲取依賴關係。
當然,所有必需的依賴項和任何自定義存儲庫都必須直接在pom.xml
文件中定義。
第四種思路
對於IntelliJ 2016-2.4(以及其他new-ish版本):
視圖>工具Windows> Maven項目
在新顯示的工具欄中,選擇Maven設置(工具集的圖標)。
當此屏幕打開時,展開Maven菜單,然後單擊導入(‘Importing’)
然後單擊“自動導入Maven項目”。另外,還要確保“JDK for Importer”選項與您使用的JDK版本相匹配。
單擊確定。現在到pom.xml中的紅色依賴,選擇紅色的燈泡,然後點擊’更新Maven索引’。
第五種思路
導入項目時,應該選擇pom.xml
而不是項目目錄。
第六種思路
當創建一個新項目時,隻需選擇以下選項:
…從外部模型導入項目
在現有外部模型(Eclipse,Maven …)上創建IDEA項目結構…
在上述問題的情況下,可以關閉項目,隻需創建一個新項目。選擇之前舊項目的目錄,這將覆蓋它,使其成為一個Maven項目。
補充
如果導入相同的路徑多次,則導入Maven依賴項可能會不起作用。這可能自動發生於導入現有的maven項目之後。出現這種情況的具體原因還不清楚按,但這應該是一個錯誤。
例如,如果項目是
hibernate
src/main
src/test
這三個路徑可能被導入為頂級節點:
hibernate
src/main
src/test
如果是這種情況,依賴關係似乎是正確的,但是在刪除多餘路徑(本例中為src/main
和src/test
)之前,它們將不會被使用。完成此操作後,刷新並單擊Build>重建項目。 IDEA將提取依賴關係。
此問題的一個症狀是,當手動檢查庫(問題的第二個屏幕截圖)時,IDEA會警告有重複的路徑。
有幾種方法可以讓重新讀取依賴關係在需要的時候使用。如果訪問“Maven Projects”選項卡,則在該選項卡的左上方有一個“Reimport All Maven Projects”圖標。如果懷疑IDEA已經搞亂了依賴關係,可以點擊文件>讓緩存失效。