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

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

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

那今天这篇的文章,总结一下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,重启电脑

    推荐阅读
  • 2020宜兴市张渚中专招生计划 宜兴张渚职业技术学校

    一、招生计划二、学校地址丁蜀校区:宜兴市丁蜀镇周墅清水塘8号和桥校区:宜兴市和桥镇运河东路138号张渚校区:宜兴市张渚镇桃溪路99号邮编:214221电话:87403381传真:87403381网址:http://www.dszj.net微信公众号:gh_635b1fe886e3

  • 八仙全传花龙是最后一仙(小芯是为花龙而存在的角色)

    小芯本来满心欢喜,以为自己能返回天庭,没想到这两人居然欺骗自己的感情,便恨上了八仙。小芯本性善良,花龙是她的大恩人,她想回报华花龙的恩情。被淹没良知的小芯变得傲慢无礼、目中无人,她的温柔全部给了花龙一人。最终小芯为救花龙,被龙王重伤,花龙被龙王打断了脊骨,小芯牺牲自己的修为修复了他的脊骨,便灰飞烟灭。小芯的离去,也使他及时醒悟,同时也放下了对艳彩的执念。

  • 挽回爱情的一句话经典语录(70句挽回爱情的句子)

    怀念得不到的爱,已经成为一种习惯。不再有对过去甜蜜的回忆,不再有对你不眠之夜。你我经过时间的磨合,未来会更美好。世界上最痛苦的事莫过于此。我把我的悲伤留给自己,如果我没有成为爱人,我会很感激。你能不能温柔的提醒我,虽然我的心太急,但我更害怕错过你!

  • 免税店和专柜的区别(免税店版、专柜版和企划版的区别)

    专柜版,需要去韩国本地的商场专柜去买,没有任何优惠折扣,但是不用担心缺货买不到。企划套盒是韩国特有的一种营销模式,有点像我们说的安利等的营销模式!同时这种说法也并未得到官方的认可。

  • 社会丹丹姐(社会我丽姐人狠路子野)

    今天,我们来放松一下,谈谈丽姐吧。而城市少年陈新颖毫无招架之力,服软喊妹妹张水丽为“丽姐”。网友则笑称这个个性十足的小女孩为——“社会我丽姐”。“丽姐”的“野性”在和城市少年陈新颖的相处过程中发挥的淋漓尽致。想打人的丽姐还没播出的时候,视频就已经上过热搜,当时网友都笑喷了。为了看丽姐,我特意去看了《变形计》,看一次笑一次。

  • 鹅不食草农村叫什么,鹅不食草的种植技术

    鹅不食草又叫食胡荽、鹅不食等。鹅不食草须根纤细,易缠结成团,颜色淡黄,茎细,分枝多,茎的质地脆弱,易折断,断面黄白色。鹅不食草一般生长在乡村的稻田或阴湿处、路旁,主要分布在我国东北、华北、华中、华东、

  • 蒋欣早期演过的电视剧(蒋欣出演的五部电视剧)

    穆婉清图一穆婉清图二穆婉清图三穆婉清图四第二部《欢天喜地七仙女》,这部剧是由霍思燕等人主演,蒋欣在里面饰演四仙女绿儿。蒋欣在里面饰演女苑和姜婉儿。剧中的女苑,甚是让人心疼。蒋欣在该剧中饰演华妃娘娘,是一个特别傲慢的女子。而她饰演的华妃娘娘已成为经典。第五部《花千骨》,这部剧是由赵丽颖,霍建华等人主演的。

  • 洗牙不能美白牙齿(洗牙不同于牙齿美白)

    人们俗称的“洗牙”,医学术语称为“龈上洁治术”。洗牙的主要目是为了维护牙周健康,防治口腔疾病。大量研究已经证明,在保持良好自我口腔健康维护的基础上,定期洁牙是维持牙周健康、预防龈炎和牙周炎发生的重要措施。若有爱喝茶、喝咖啡、饮料、抽烟等习惯以及患有牙周疾病的人士,建议每半年左右到正规医院洁牙一次;无以上习惯、牙齿较为健康的人士,建议每一年左右到正规医院洁牙一次。

  • 赞美伟大母爱的名言(关于赞美伟大母爱的名言)

    世界上的一切光荣和骄傲,都来自母亲(高尔基),接下来我们就来聊聊关于赞美伟大母爱的名言?(高尔基)母亲是天生的哲学家。——斯托夫人母亲不是赖以依靠的人,而是使依靠成为不必要的人。——美国女小说家菲席尔。我之所有,我之所能,都归功于我天使般的母亲。——美国作家诺埃尔。如果我有所成就的话,这要归功于她。

  • 隔离乳和隔离霜的区别在哪(隔离乳和隔离霜的区别在哪里)

    隔离乳使用之后更加的清爽,所以更适合油性或者是偏油性肌肤使用。