IntelliJ IDEA中Maven插件無法更新索引之解決辦法
By Wang Xu
Maven的倉庫、索引
中央倉庫:目前來說,http://repo1.maven.org/maven2/ 是真正的Maven
中央倉庫的地址,該地址內置在Maven
的源碼中,其它地址包括著名的ibiblio.org,都是鏡像。
索引:中央倉庫帶有索引文件以方便用戶對其進行搜索,完整的索引文件至2015年12月8日大小約為1.11G,索引每周更新一次。
本地倉庫:是建立在本地機器上的Maven
倉庫,本地倉庫是中央倉庫(或者說遠程倉庫)的一個緩沖和子集,當你構建Maven
項目的時候,首先會從本地倉庫查找資源,如果沒有,那么Maven
會從遠程倉庫下載到你本地倉庫。這樣在你下次使用的時候就不需要從遠程下載了。如果你所需要的Jar
包版本在本地倉庫沒有,而且也不存在於遠程倉庫,Maven
在構建的時候會報錯,這種情況可能發生在有些Jar
包的新版本沒有在Maven
倉庫中及時更新。Maven缺省的本地倉庫地址為${user.home}/.m2/repository
。也就是說,一個用戶會對應的擁有一個本地倉庫。當然你可以通過修改${user.home}/.m2/settings.xml
配置這個地址:
1 |
<settings> |
提交內容:只要你的項目是開源的,而且你能提供完備的POM
等信息,你就可以提交項目文件至中央倉庫,這可以通過Sonatype
提供的開源Maven倉庫托管服務實現。
IntelliJ IDEA利用索引實現自動補全
眾所周知,由於偉大的中國防火牆,所以在使用IDEA下載Maven倉庫索引的時候,要么無法訪問,要么就是速度極慢,這對開發人員帶來了極大的不便,所以一般公司都用Nexus搭建一個公司內部的私服。同時利用私服更有利於對公司內部開發人員依賴的Jar包版本進行控制。
也許你會問,中央倉庫帶有索引,為什么本地的IDEA也需要下載索引呢?那么直接看下圖你就明白了,如果本地沒有下載索引的話,在pom.xml
文件中添加依賴是得不到任何提示的。
IntelliJ IDEA中Maven插件配置
IntelliJ已經內置了對Maven插件的支持,當然你也可以配置自己的Maven,只需要進入Settings->Maven->Maven home directory|User settings file|Local repository
配置即可。注意如果使用自己配置的Maven,那么一定要勾選Override
,否則配置不生效。
IntelliJ14.1更新索引失敗原因
在使用14.1.X版本的IntelliJ時,更新Maven索引出現如下錯誤Indexed Maven Repositories - type remore - Error - Idea 14.1.5,根據該鏈接內所述原因為:這是IntelliJ14.1.X版本中的一個BUG,並且會在下一個發布版本中進行修復,推薦將IntelliJ升級到版本15。
使用國內Maven倉庫的鏡像
鑒於偉大的防火牆,所以推薦使用國內的鏡像資源作為Maven中央倉庫。推薦使用開源中國Maven庫使用幫助,配置很簡單就不詳述了,直接上我本機配置好的settings.xml
文件如下:
1 |
<?xml version="1.0" encoding="UTF-8"?> |
另外你也可以下載開源中國提供的官方純凈版settings.xml文件。
下載Maven倉庫的索引
在配置完成之后就可以下載倉庫索引了,注意這是一個非常耗時的過程,建議利用晚上或者出去午飯時間下載。下載過程及下載完成之后狀態如下圖所示。本次下載整體耗時在一個小時左右。
另外我在思考既然下載一次這么麻煩,那么下載下來的索引存放在哪里呢?我能否將其拷貝到其他機器重復利用呢?於是經過一番搜索我發現了索引的存放位置,並且將其打包拷貝到其他機器的同樣位置,但未做測試,不知能否重復利用,如有網友測試完畢,可以告訴我,感謝之。
利用本地Tomcat作為索引下載服務器
- 首先下載如下兩個文件:
http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties
http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.gz - 啟動一個Apache Tomcat服務器,在其根目錄下建立一個
/maven2/.index
的虛擬目錄(注意:如果你使用的是Windows系統,可能無法建立.index
件夾,必須使用DOS命令:mkdir .index
),把上述兩個文件拷貝至該虛擬目錄下 - 編輯
C:/WINDOWS/system32/drivers/etc/hosts
文件,在文件中加入:127.0.0.1 repo1.maven.org
注意:127.0.0.1
為步驟2的Apache Tomcat
服務器IP地址。 - 在IDEA的maven插件中更新索引
- 移除步驟3中在hosts文件中添加的內容
備注:其實該解決辦法的總體思路就是先將索引文件整體下載,然后利用本地的Tomcat作為服務器,再從Tomcat上更新索引。
最后如果你想自己配置一個私服,可以參考Maven倉庫管理之Nexus。
開源中國鏡像存在的問題
- 開源中國鏡像不是很穩定,有時候很快下載完成有時候一直處於
Resolving dependencies of ...
狀態而無法下載 - 在配置了開源中國第三方庫鏡像之后,發現一個問題,該庫內容更新不及時,很多第三方庫中的Jar包版本都非常陳舊。
- 開源中國的中央倉庫與第三方庫中存在很多交叉的情況,也就是說中央倉庫包括了第三方庫中的內容,而且在下載jar文件的時候,默認就是直接從開源中國的中央倉庫鏡像下載,而不是開源中國的第三方倉庫鏡像下載。
我給出的建議是,如無必要,移除開源中國的第三方庫鏡像地址,移除的內容如下
1
2
3
4
5
6<mirror>
<id>nexus-osc-thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<name>Nexus osc thirdparty</name>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>針對以上問題,有時候還是需要從國外Maven官方的倉庫下載,方法是只需要修改
settings.xml
文件為官方默認版本即可。現將Maven默認settings.xml
貼出1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:/apache-maven-3.3.1/repository</localRepository>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
</mirrors>
<profiles>
</profiles>
</settings>
