IDEA里Maven项目中部分依赖无法下载的解决办法
该问题的常见错误信息:
xx was cached in the local repository, resolution will not be reattempted until the update interval of nexus
下方解决方案通用。
在maven构建的项目中,有时候运行 compile命令
会出现部分依赖无法下载的情况。现解决方案如下:
1.确认pom.xml中的远程仓库或者nexus私服配置正确
有些项目的pom.xml会配置nexus私服,用于下载一些局域网依赖或者其他公开私服的依赖,请确认这里配置正确。(没有使用远程仓库或本地nexus私服的请跳至下一步~)
当前也可以改为使用一些国内比较好用的仓库镜像配置,如阿里云,从而加快包的下载,不再从官方仓库缓慢下载而导致下载不下来。
项目中pom.xml中的远程仓库配置示例:
//阿里云搭建了一个国内镜像http://maven.aliyun.com,跑起来速度很快,可以进行配置
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>nexus-aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
本地maven子目录/conf/settings.xml中settings.xml中配置:
<mirror>
<!--This sends everything else to /public -->
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
修改完毕之后,包的下载速度会变快,如果看到进度条还是艰难地从http://repo.maven.apache.org/maven2/ 官方仓库中 download 的话,尝试重启下 IDE 。感谢阿里云为广大代码工作者做出巨大贡献。
2.如果修改了仓库配置后点击compile
并刷新后依旧无法下载个别依赖,可以移除本地maven的repository中的相应依赖的下载文件,让其重新下载。
有时候我们依赖下载失效是由于本地已经存在一份失效的依赖下载,导致项目默认从本地的依赖中进行依赖获取而导致项目失效,我们可以通过删除本地的依赖来让项目重新下载依赖。
maven在本地的依赖存储地址为:Default: ${user.home}/.m2/repository
即 ~/.m2/repository
下
用命令行打开目录可看到所有依赖
接下来以json-lib-2.4包为例,通过
cd net/sf/json-lib/json-lib
进入包目录下,删除目录下文件夹
2.4
,命令为:rm -r 2.4
然后进入IDEA项目中,再次点击Maven dependency中的 compile进行包下载,正常可以下载成功。
3.如果修改了仓库配置,重新下载尝试几次后依旧无法正常使用依赖,需要手动下载依赖,然后覆盖本地maven的repository中的jar包,从而导入依赖。
依赖的下载地址:官方依赖仓库、Repository依赖搜索地址【点进去搜索自己要的依赖然后选择地址进行下载,从而实现依赖的下载】
下载后通过命令行复制到步骤2的repository目录下:
cp 你下载的文件 要到的文件地址
示例:
cp /Users/root/Downloads/json-lib-2.4-jdk15.jar /Users/root/.m2/repository/net/sf/json-lib/json-lib/2.4
4.部分依赖jar包需要添加classifier字段
如上文提到的json-lib-2.4包,我下载下来后为json-lib-2.4-jdk15.jar,这与maven依赖名json-lib-2.4不符,最后maven还是会找不到这个依赖,原因是 jar的名称中多了一个跟JDK相关的名称,例如jdk15,按照上面的配置,明显是找不到这个jar的,于是classifier就有它的用武之地了,它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar,示例如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>