IntelliJ IDEA中Maven插件无法更新索引之解决办法

原文链接: http://www.cnblogs.com/shaoke123/p/5035924.html
    • Home
    • Archives
    • Resume
    • Links
    • About

IntelliJ IDEA中Maven插件无法更新索引之解决办法

By Wang Xu

 发表于 2015-12-09

文章目录
  1. 1. Maven的仓库、索引
  2. 2. IntelliJ IDEA利用索引实现自动补全
  3. 3. IntelliJ IDEA中Maven插件配置
  4. 4. IntelliJ14.1更新索引失败原因
  5. 5. 使用国内Maven仓库的镜像
  6. 6. 下载Maven仓库的索引
  7. 7. 利用本地Tomcat作为索引下载服务器
  8. 8. 开源中国镜像存在的问题

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
2
3
4
5
<settings>
···
<localRepository> D:/java/repositorylocalRepository>
...
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

<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/repositorylocalRepository>
<pluginGroups>
pluginGroups>
<proxies>
proxies>
<servers>
servers>
<mirrors>
<mirror>
<id>nexus-oscid>
<mirrorOf>*mirrorOf>
<name>Nexus oscname>
<url>http://maven.oschina.net/content/groups/public/url>
mirror>
<mirror>
<id>nexus-osc-thirdpartyid>
<mirrorOf>thirdpartymirrorOf>
<name>Nexus osc thirdpartyname>
<url>http://maven.oschina.net/content/repositories/thirdparty/url>
mirror>
mirrors>
<profiles>
<profile>
<id>jdk-1.4id>
<activation>
<jdk>1.4jdk>
activation>
<repositories>
<repository>
<id>nexusid>
<name>local private nexusname>
<url>http://maven.oschina.net/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>nexusid>
<name>local private nexusname>
<url>http://maven.oschina.net/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
pluginRepository>
pluginRepositories>
profile>
profiles>
settings>

另外你也可以下载开源中国提供的官方纯净版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-thirdpartyid>
    <mirrorOf>thirdpartymirrorOf>
    <name>Nexus osc thirdpartyname>
    <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

    <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/repositorylocalRepository>
    pluginGroups>
    <proxies>
    proxies>
    <servers>
    servers>
    <mirrors>
    mirrors>
    <profiles>
    profiles>
    settings>

转载请注明出处:http://codepub.cn/2015/12/09/IntelliJ-IDEA-in-Maven-plugin-could-not-update-the-index-of-the-solution/

IntelliJ IDEA中Maven插件无法更新索引之解决办法_第1张图片

转载于:https://www.cnblogs.com/shaoke123/p/5035924.html

你可能感兴趣的:(IntelliJ IDEA中Maven插件无法更新索引之解决办法)