最近在idea 2020中打开项目的时候遇到编译报错的问题,把解决方法分享一下。
方法:删掉idea生成的 .iml 文件,然后执行
mvn idea:module
重新生成
以下为过程记录:
首先是git clone项目,然后idea打开,等项目加载完后,一堆报错,找不到类,还项目结构也是乱的。
然后用命令行执行mvn clean compile
,发现能够正常编译,好吧,又是idea的问题。但前几天在公司电脑上都可以正常编译的。
然后尝试解决。
- invalidate cache/restart,清一下idea缓存,再重启 -------- 失败
- reimport 重新导入maven依赖 ---------- 失败
- 把代码删了,重新下载,再打开 --------- 失败
- 网上看的 mvn install,部分依赖没有加载到本地仓库,所以install一下。但我的依赖都在仓库里,而且
mvn compile
都能成功,算了也试一下,-------- 失败 - 删掉 iml 文件,重新导入 --------- 失败,并且发现 iml 文件基本是空的
- 直接把公司电脑上的项目整个复制到自己电脑上,然后打开,(主要想复制 iml 文件,但里面也有好几个module,所以直接复制整个了) ----- 失败
然后,就看到有说 mvn idea:module
能够生成 iml 文件的,感觉可行,直接通过mvn生成。然后顺便查了一下,又发现了mvn idea:idea
这个命令,可以直接生成idea的项目文件,那我不直接用这个生成全套得了。 ----- 成功
注意:
mvn idea:idea
这个插件据说从13年就不再维护了,可能会导致一些其他的问题。
但是管他呢,能让idea编译成功就行。然后就发现了还会生成 ipr 和 iws 两个文件,啊,好熟悉,之前导入项目的时候也是因为这两个文件搞了一天。
但是,我又发现,部分能够编译的项目里面,又没有ipr和iws这两个文件,而且 .gitignore 里面也没有排除它们,难道这两个文件是多余的?然后搜了一下,也没啥结果。
于是我又在另一个报错的项目里面,试一下mvn idea:module
这条命令,只生成iml,发现也可以正常编译,而且没有那两个多余的文件。(注意先把原来的iml删掉)
其实看一下iml文件的内容就知道,里面有记录各种依赖的信息,然后idea编译的时候应该是直接根据iml里面的内容来的。然后我编译失败的,一般要么iml里面空的,要么一些依赖的版本 unknown,反正就是idea的问题。
空空如也的iml文件
正常的iml
啊,本来还想找一下bug的,一下午全浪费在这上面。