文章目录

  • 项目场景:
  • 问题描述及原因:
  • Maven不识别引入的依赖
  • 问题分析
  • 解决办法(建议全都操作一遍)
  • 只有pom.xml种无法识别依赖
  • 问题分析
  • 解决办法


项目场景:

在以Maven为项目管理工具下的SpringBoot框架下进行Web项目中,其中Maven自定义Mirror镜像为阿里云,未使用IDEA自带Maven


问题描述及原因:

Maven窗口看到,部分或者全部jar包显示为无法识别状态,打开相应的maven库发现各个jar包完好无缺,在多次实验中发现多次打开同一项目会出现不同的依赖无法识别,即依赖不识别是随机出现的,我称之为“薛定谔的依赖不识别”,此种不识别共分为3种类型

Maven不识别引入的依赖

idea用maven打的jar包运行不了 idea maven jar包不识别_xml

问题分析

项目初始化会加载Maven项目依赖结构的缓存,快速构建pom文件指定的依赖与maven本地的repository库中的链接关系,当Maven发现pom文件指定的依赖在repository库中不存在、不对应、文件不完全时就会报出Maven识别错误。

  • 此情况下如果pom文件能够识别依赖准确位置,一般是pom依赖下载不全或者依赖损坏导致。
  • 如果pom文件同时不能识别依赖准确位置,一般是pom依赖无法链接,一般是pom依赖被删除

pom依赖损坏常见于网络受限原因,maven会在repository库中生成后缀为.lastUpdated的同名中间文件,必须删除中间文件否则会一直识别失败,可编写简单bat脚本自动扫描并删除中间文件

总的来说Maven窗口依赖报错一般是上一次成功引入依赖链接后,链接或者依赖自身损坏导致,但是请注意还可能存在repository库权限问题,IDEA默认的repository库是在用户目录下.m2文件夹下,所以不存在权限问题


解决办法(建议全都操作一遍)

  • Maven配置检查:请检查IDEA软件中的setting-Maven中的Maven_Home、setting配置文件、repository库地址是否正确,随后检查maven的setting.xml文件中的Mirror选项配置是否正确,请注意,一定要参照阿里云官方格式书写
  • idea用maven打的jar包运行不了 idea maven jar包不识别_maven_02

  • 重载Maven配置:请先在右侧Maven窗口确认Toggle offline mode关闭,之后进行maven clean操作,随后点击Maven窗口的Reload project按钮进行配置重载,最后使用maven install命令进行maven缺失依赖的安装(亦可使用Maven窗口的Download Source进行安装)。如果依旧无法改善问题,可以删除项目目录下的.iml文件,随后选中module的pom.xml,右键,选择" add as maven project"
  • idea用maven打的jar包运行不了 idea maven jar包不识别_intellij-idea_03

Toggle offline mode是脱机模式,即只在本地搜索可用依赖;.iml文件是maven工程配置文件,Maven依赖链接缓存就在这里,此外该文件还包括目录结构等

  • repository库清理:百试不爽的招数,视报错数量大小自定义删除repository库中的依赖,可全部删除。随后重载Maven配置并重新下载依赖。依照下载反馈修改IDEA中的相关参数,包括内存限制、SSL认证等问题

阿里云官方给出的仓库链接是https,因此可能会存在https认证不通过问题,该种问题表现为无法完整下载依赖,存在大量的.lastUpdated文件,其解决办法为在File -> Settings -> Maven -> Importing -> VM options for importer参数中添加选项,参考这里 还有一些情况下在File -> Settings -> Maven -> Importing -> VM options for importer选项中放宽内存限制同样解决无法下载完全依赖的方法,参考这里注:我们学校的校园网应该对某些网址进行流量和速度限制,因此某些时候我用校园网无法完全下载pom依赖(信息黄泉md),我切换成手机热点即可下载

只有pom.xml种无法识别依赖

idea用maven打的jar包运行不了 idea maven jar包不识别_问题分析_04


以上图片只是举个例子


问题分析

只有pom.xml中某几处依赖飘红报错是最常见的问题,Maven依据groupId、version和artifactId属性生成相应的依赖链接,随后向中央仓库或者本地仓库请求依赖本体,一旦成功进行链接即会在Maven缓存中生成链接(表现为右侧Maven窗口可见该依赖及依赖树结构),如果第一次请求链接失败则不会进行Maven缓存,此时就会出现只有pom文件报错而右侧Maven窗口无异常的情况

  • 99%情况是书写不合规范,包括版本号错误、groupId不存在、artifactId拼写错误等等

解决办法

  1. 确定pom依赖是否可以正确链接到本地仓库
  2. idea用maven打的jar包运行不了 idea maven jar包不识别_intellij-idea_05

  3. 悬浮于依赖上方即可出现链接信息
  4. 从MVNrepository网站找到正确的pom格式,网址在这里
  5. idea用maven打的jar包运行不了 idea maven jar包不识别_xml_06

  6. 在搜索框中搜索依赖名称,随后选择版本号即可显示正确的pom格式