说一说 Maven 依赖下载失败的问题总结分析

简介: 我是小假 期待与你的下一次相遇 ~

网络问题,无法下载 maven 依赖

一般来说,如果没有配置,Maven会在默认的中央仓库下载各项依赖,而访问这个地址,网络速度不仅慢,网络质量还差。这就导致了maven 依赖下载速度过慢,有时候下载还可能会失败。

maven 依赖下载失败,这就会导致 IDEA 找不到相关依赖。

那这个问题解决办法也比较简单,可以通过设置镜像(mirrors)地址解决。

打开本地 maven 配置文件,默认地址如下:${user.home}/.m2/settings.xml,然后找到 mirrors节点,在这下面添加以下配置:

  1. <mirrors>
  2.    <mirror>
  3.      <id>alimaven</id>
  4.      <name>aliyun maven</name>
  5.      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  6.      <mirrorOf>central</mirrorOf>        
  7.    </mirror>
  8. </mirrors>

lastUpdated 文件导致依赖无法正常导入

当更新镜像地址之后,有可能还会碰到 maven 依赖无法导入。

maven 依赖下载的时候,如果碰到网络较差,依赖下载失败,maven 本地将会生成 lastUpdated 为后缀的文件。

那正常的 maven 依赖如下

lastUpdated 为后缀的文件作用如下:

只要 lastUpdated 文件存在,maven 依赖将不会重新下载,所以做简单的方法就是,删除 lastUpdated 文件,重新刷新下载即可。

这里提供一键删除 lastUpdated 文件脚本(macos)

  1. # 这里写你的仓库路径
  2. REPOSITORY_PATH=~/.m2/repository
  3. echo 正在搜索...
  4. find $REPOSITORY_PATH -name "*lastUpdated*" | xargs rm -fr
  5. echo 搜索完
  6. windows 脚本如下:
  7. # windows脚本
  8. @echo off
  9. rem create by NettQun
  10. rem 这里写你的仓库路径
  11. set REPOSITORY_PATH=D:\Java\maven-repository\maven-aliyun\repository
  12. rem 正在搜索...
  13. for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
  14.    echo %%i
  15.    del /s /q "%%i"
  16. )
  17. rem 搜索完毕
  18. pause

Maven 依赖冲突,引用错误

前两个问题主要跟本地网络有比较大的关系,那这个问题,主要是因为 maven 特性导致。

那 maven 有一个依赖传递的特性,如果 A 依赖 B,而 B 依赖 C,那么 C 这个依赖就会通过 B 间接传递给 A。

那如果有多个间接依赖存在,但是彼此版本却不一样,这就会导致依赖冲突。

如上所示,如果 A 应用 使用了 E2.0 新增某些类或者方法,那这个时候由于依赖冲突,A 实际上间接依赖的是 E1.0,这就导致 IDEA 编译的时候找不到 E 新增这些类或方法。

那这个问题解决办法,也比较简单,有冲突,就直接解决冲突就可以了。

可以在 IDEA 中安装一个 Maven Helper 插件,然后打开 pom 文件,点击 Dependency Analyzer 选项,在这里面选中 Conflicts 按钮,就可以看到当前所有冲突的依赖包。

选中其中一个依赖包,就可以在右侧看到所有冲突依赖包的版本。选中其中一个版本,右键选中 Exclude 即可。

上面的办法通过排除其他间接依赖从而解决问题。那下面还有一种解决办法,将间接依赖转化为直接依赖。

可以把间接依赖直接写在项目 pom 文件里,这样 maven 将会直接使用这个依赖,其他间接依赖将会失效。

Maven 间接依赖异常

这个问题,就比较诡异,这也是刚开头提到那个问题。

项目中依赖关系如下所示。

A 应用依赖 B ,那 B 是一个开源项目,但是公司内部对 B 进行一些修改。修改之后, B 依赖 C ,所以 A 中使用 C 依赖某些类。

那由于本地仓库已经下载了 B 开源版本,那当本地拉取 A 应用源码,那依赖关系就变成了 图中虚线关系。

IDEA 缺失了 C 依赖,这就导致项目编译错误,无法找到 C 中一些类。

那这个问题解决办法,就是在本地仓库找到 B 依赖,然后删除拉取即可。

解决办法比较简单,关键需要找到中间这个依赖。

IDEA 本地缓存异常

最后一种情况,跟 IDEA 有比较大关系。

IDEA 之所以快,那是因为 IDEA 打开新的工程的时候,它会构建项目索引以及生成相关缓存。

那有时候,如果 IDEA 缓存被破坏,那就有可能导致 IDEA 无法识别 maven 依赖, 从而导致 IDEA 无法找到某些类。

这种情况需要删除原先的缓存以及索引,等待 IDEA 重新构建缓存以及索引即可。

在 IDEA 中点击 File/Invalidate Cached 即可。

最后

如果如果碰到新的情况,以上几种解决办法都没办法解决,那么只能尝试使用终极解决办法试试看了。

重启大法,重启 IDEA,重启电脑。

相关文章
IDEA常用插件之代码扫描SonarLint
IDEA常用插件之代码扫描SonarLint
1092 0
|
7月前
|
缓存 Java 测试技术
Maven 依赖下载失败的 10 种解决方案:排查指南
本文深入总结了 Maven 依赖下载失败的 10 种常见场景及解决方案,包含 .lastUpdated 文件清理、镜像源切换、网络超时调整、SSL 证书问题、仓库权限配置等企业级实战经验。提供完整的排查流程图和一键修复脚本,帮助你快速定位并解决依赖下载问题。掌握这些技能,你将能够应对 99% 的依赖下载故障。适合 Java 开发者、DevOps 工程师阅读。
Maven 依赖下载失败的 10 种解决方案:排查指南
|
缓存 Java Maven
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法!在处理Maven项目问题时,首先检查Maven配置是否正确。接着通过“File--Invalidata Caches”清除IDEA缓存并重启。使用Maven命令`mvn dependency:purge-local-repository`和`mvn dependency:resolve`清除本地依赖缓存。最后,在Terminal中输入`mvn clean install`完成构建。
5196 1
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
23312 12
|
Java Maven
震惊!idea专业版如何配置maven国内源手把手教学
文章提供了如何在IDEA专业版中配置Maven使用国内源(如阿里云)的详细步骤,以加快依赖下载速度,并解释了配置国内源的原因。
5326 0
震惊!idea专业版如何配置maven国内源手把手教学
|
Java Spring
Gradle 如何确保依赖的版本兼容性
Gradle 通过依赖管理机制确保版本兼容性,使用声明式配置定义项目依赖,自动解析和下载所需库。它支持版本范围和动态版本,通过冲突解决策略选择最佳版本,保证构建的一致性和可靠性。
1800 3
|
存储 安全 Java
javax.security.auth.login.LoginException: Unable to obtain password from user
假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。我之所以选这么旧的版本,是因为我最后要在自己项目集成,我们项目就是上面版本附近的,所以不能选太高版本,这点请注意各版本之间的兼容性问题。:如果里面的某些配置不知道在哪或者不知道干啥的,可以看我的前面的博客,详细介绍了安装配置等,可以大致了解参数。
742 9
|
Java Maven
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
7584 0
|
Java Maven
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
14991 1