百摩网
当前位置: 首页 生活百科

idea找不到主类(悲剧IDEA突然找不到类了)

时间:2023-06-15 作者: 小编 阅读量: 2 栏目名: 生活百科

那今天这篇的文章,总结一下IDEA运行maven项目找不到相关依赖报错的问题原因以及解决办法。maven依赖下载失败,这就会导致IDEA找不到相关依赖。IDEA本地缓存异常最后一种情况,跟IDEA有比较大关系。IDEA之所以快,那是因为IDEA打开新的工程的时候,它会构建项目索引以及生成相关缓存。那有时候,如果IDEA缓存被破坏,那就有可能导致IDEA无法识别maven依赖,从而导致IDEA无法找到某些类。

我们本地使用 IDEA 运行 maven 项目的时候,有时候运气不好,就会遇到某些 maven 依赖无法正常找到、导入。这就会导致 IDEA 构建项目的时候爆出一堆醒目的红色 Error。

那最近新拉取一个项目源码,本地运行项目,又碰到这种情况。按照以前的解决经验,捣鼓了一下,发现没办法解决。于是研究了一下午,终于解决这个问题。

吐槽一下,刚开始一度以为是这个项目有问题,找了一个同事,发现他的电脑是却可以正常运行这个项目。

那今天这篇的文章,总结一下 IDEA 运行 maven 项目找不到相关依赖报错的问题原因以及解决办法。

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

Maven 默认的中央仓库地址为 http://search.maven.org/#browse,那这是一个外网的地址。

而我们国内访问外网地址,网络速度不仅慢,网络质量还差。这就导致了maven 依赖下载速度过慢,有时候下载还可能会失败。

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

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

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

<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors>

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

当你更新镜像地址之后,有可能还会碰到 maven 依赖无法导入,那恭喜你碰到第二个问题了。

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

那正常的 maven 依赖如下

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

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

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

# 这里写你的仓库路径REPOSITORY_PATH=~/.m2/repositoryecho 正在搜索...find $REPOSITORY_PATH -name "*lastUpdated*" | xargs rm -frecho 搜索完

windows 脚本如下:

# windows脚本@echo offrem create by NettQunrem 这里写你的仓库路径set REPOSITORY_PATH=D:\Java\maven-repository\maven-aliyun\repositoryrem 正在搜索...for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (echo %%idel /s /q "%%i")rem 搜索完毕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,重启电脑

    推荐阅读
  • 绍兴西施故里有哪些热门景点 绍兴西施故里介绍

    但因历史的原因和保护意识的淡化,许多珍贵的艺术品已处于消失和毁灭之中。

  • 腾讯软件管理独立版好用吗(腾讯系软件装逼指南)

    关键词:QQ,微信,朋友圈,QQ空间不申明:我说的装逼并不是贬义,装逼并不是坏事,除非你另有所图先来说说QQ系软件,都坐稳了有图有真相6S会员排名第一个应该属于腾讯推出的移动设备在线显示功能别人一看就能知道你使用的是什么手机,你懂的蓝绿大厂,你值得拥有接下来是微信朋友圈直接上图我是有学问的我美不美?

  • 自讨苦吃的意思(自讨苦吃如何理解)

    我们一起去了解并探讨一下这个问题吧!自讨苦吃的意思自讨苦吃,汉语词成语,读音是zìtǎokǔchī,意思是自己找苦吃。出自明·张岱《陶庵梦忆·朱云崃女戏》:“殷殷防护,日夜为劳,是无知老贱自讨苦吃者也。”

  • 榨菜是什么菜做的(四川榨菜是什么菜做的)

    2、剥菜将青菜头基部老皮老筋剥去,不可损伤突起瘤及菜耳朵。

  • 目前的蓝牙耳机哪个牌子好(蓝牙耳机什么牌子的好用)

    极度舒适的佩戴感:林叔认为耳机既然要长时间佩戴,舒适度肯定要作为关键!90ms超低的延迟感:另外,JEET的蓝牙性能口碑一直很不错,经过长时间的对比测评,林叔认为JEET的延迟感是500元内蓝牙耳机难以媲美的。得益于华为自主研发芯片麒麟A1,让耳机可以实现蓝牙耳机的双通道传输,两个耳机可以分别从手机获得左右声道的信号,直接与手机连接,不分主机副机,互不干扰。

  • 草籽怎样才能不发芽(草籽不发芽的方法)

    如果不滚压,还可能带来的一种结果就是草籽会浮在土地表层,太阳温度过高,暴晒下会使草籽难以发芽。但如果浇水过少,缺水的种子会发芽缓慢甚至不发芽,浇水过多容易造成草籽长时间浸泡下腐烂,同样无法很好的发芽。当土地的酸碱度失常时,也要施加相应的东西。除了肥沃度不够,病虫和杂草的危害同样不可忽视,要对播种后的草坪及时检查,对于病虫害要适当喷施杀虫剂,对于杂草应及时进行人工拔除或者喷洒除草剂。

  • 小黄鱼去腥味炖法(小黄鱼去腥味炖法视频)

    炖黄鱼的具体做法:1、黄花鱼1000克。猪肥瘦肉、青蒜、青菜各100克。鲜姜10克、大葱15克、绍酒20克、醋15克、酱油10克、芝麻油10克、花生油250克、精盐7.5克。姜片偏炒几下,倒入肉丝偏至断血,放入绍酒、醋,加入酱油、清汤、精盐烧至沸,将鱼入锅内小火熬炖20分钟,撒上青菜、青蒜,淋上芝麻油盛汤盘内即成。

  • 陕西省总共有多少个县(陕西和河南各有一个县)

    陕西和河南各有一个县陕西和河南两个相邻的省份,不仅有着悠久的历史,也同样有着灿烂的文化只是在经济发展上人口较多的河南要略胜一筹而今天我们要来带大家了解一下,在陕西和河南两个省内各有一个县,它们的名字“同音不同字”,极其相。

  • 乙状结肠镜可以查出结肠癌吗(为什么未做肠镜)

    7天前,带年轻医生出专家门诊,对一位来看病的病人的腹痛、便秘患者,未做肠镜检查前,就正确诊断出了患者的乙状结肠癌疾病,让这位年轻医生感到奇怪?后来肠镜与病理检查结果出来,证实无误的那天,这位年轻医生终于忍不住问我:主任:为什么未做肠镜检查,当时你就知道患者是乙状结肠癌?这位乙状结肠癌患者,也是不出意外。

  • 冬季如何防控新冠疫情 冬季如何防控新冠疫情传播

    每日至少通风2次,每次10~15分钟。要用流动清水和洗手液洗手。