据身边统计学统计数据,每一个开发者在幼崽阶段,都会面临一个问题:maven依赖下载失败怎么解决?。而且这个问题会在他的浏览器搜索记录中稳居Top10的位置。
因此,初学者非常需要一套完备的maven配置检查流程。因为大多数初学者对这些配置不甚了解,我将其命名为Maven玄学做法。
每个作法后面都会有一些个人理解的深层原因,希望各位在处理问题后能够知其然知其所以然。
小小的了解一下Maven
Maven在开发者日常工作中不可或缺,最重要功能的是帮助开发者快速搭建项目框架,管理项目的依赖关系。
简而言之,Maven相当于一个依赖管理仓库,帮助你梳理错综复杂的依赖关系,集中管理所有的依赖包。
依赖都会通过maven下载到settings文件设置的本地仓库中。
下载嘛,如果出问题,只需要从以下几方面入手就行:网络、配置、镜像仓库。
maven依赖玄学做法系列
如果你是刚开始用maven下载失败,那么我建议首先查自己的settings.xml文件。
如果是已经下载过的选手,大部分都可以略过这一步,因为这个东西已经证明了它好用,所以很可能是新建项目的配置问题。
1.查看settings.xml
建议通过以下方式,在IDEA中打开,以为如果配置文件有问题会自动爆红方便排查。
以下是一个简单的settings.xml实例
<?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">
<!--本地仓库。该值表示构建系统本地仓库的路径。其默认值为${user.home}/.m2/repository。 -->
<localRepository>D:\Maven\repository</localRepository>
<!--配置服务端的一些设置。如果局域网内部有nexus,需要管理项目jar包可配置 -->
<servers>
</servers>
<!--为仓库列表配置的下载镜像列表-->
<mirrors>
<!--给定仓库的下载镜像-->
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<!-- 仓库配置 -->
<profiles>
<!--根据环境参数来调整的构件的配置 -->
<profile>
<!--该配置的唯一标识符 -->
<id>lovecto_profile</id>
<!-- 远程仓库列表 -->
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<!-- 配置插件下载的仓库列表-->
<pluginRepositories>
<pluginRepository>
<id>thirdparty_repository</id>
<name>thirdparty_repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- 激活所使用的配置-->
<activeProfiles>
<activeProfile>lovecto_profile</activeProfile>
</activeProfiles>
</settings>
注意
<localRepository>D:\Maven\repository</localRepository>部分换成自己的。这个地址在下载失败时经常会排查。
settings.xml文件很少有问题的,属于顺便看一眼就行那种。推荐各位可以多加几个备用镜像仓库,留一手防止阿里云仓库崩了(极小概率事件)。
<mirror>
<id>ibiblio.org</id>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina -->
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
2.重点排查IDEA配置
这里检查下自己的配置,很多老铁都是新建项目使用了默认的配置文件导致下载失败。除了关注使用了正确的配置文件外也顺便一下,那个Local repository是不是自己的设置的那个。
注意那个work offline不能点昂,那个是只在本地仓库加载依赖而不会从私服中找。
顺便看一下,Ignored files有没有忽略配置文件的,以下一个都不能点。(虽然这个很少有人用,但保不准有个兄弟开了忘了关。)
如果你每次都需要重新配置这里,那我建议花点时间为所有的新项目都标准的配置一下,一劳永逸的事,何乐而不为。
3.有点玄学的挣扎
如果以上都没有成功,同时你还不想费劲白咧的从私服上手动下载依赖移到仓库中,那么可以尝试下这几个比较玄学的做法。
刷新大法
右键项目,重新加载项目,一般来说第一步就会尝试这个,但是这个确实挺玄学的,成功的概率不低也不高。
这个能处理的情况是:项目没有自动加载配置,导致下载失败。
重新编译
在右边的maven选项中,先后点击clean和compile,起作用的概率很小,但万一你就是这个问题呢。
这个能处理的情况是:如果出现了 java.io.FileNotFoundException这种错误,那就在maven的conf目录下新建一个logging文件就行了。
删除包重新下载
还记得自己的仓库位置不,记不住上去找一下。找到对应路径对应版本的依赖包,把他删了重新maven下载。可能就能解决。
这个能处理的情况是:如果网络不太好,包里面下载失败了他会出现这么个东西(后缀为lastupdated)。建议最好是换个网络重新下载,没有这个lastupdated应该就成功了。
![]()
手动下载
如果上面的方法都尝试过仍然不好使,那我的建议是直接进到那个私服仓库的网址中把对应的文件手动下载下来,然后移动到他该有的位置(对应位置关系如下图)。
进行到这一步实在是不得已而为之,虽然麻烦了点,但是保证有用。