最近在idea 2020中打开项目的时候遇到编译报错的问题,把解决方法分享一下。

方法:删掉idea生成的 .iml 文件,然后执行mvn idea:module重新生成

以下为过程记录:

首先是git clone项目,然后idea打开,等项目加载完后,一堆报错,找不到类,还项目结构也是乱的。
然后用命令行执行mvn clean compile ,发现能够正常编译,好吧,又是idea的问题。但前几天在公司电脑上都可以正常编译的。

然后尝试解决。

  1. invalidate cache/restart,清一下idea缓存,再重启 -------- 失败
  2. reimport 重新导入maven依赖 ---------- 失败
  3. 把代码删了,重新下载,再打开 --------- 失败
  4. 网上看的 mvn install,部分依赖没有加载到本地仓库,所以install一下。但我的依赖都在仓库里,而且mvn compile都能成功,算了也试一下,-------- 失败
  5. 删掉 iml 文件,重新导入 --------- 失败,并且发现 iml 文件基本是空的
  6. 直接把公司电脑上的项目整个复制到自己电脑上,然后打开,(主要想复制 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文件

idea查看编译和运行java版本 idea查看编译错误_java


正常的iml

idea查看编译和运行java版本 idea查看编译错误_git_02


啊,本来还想找一下bug的,一下午全浪费在这上面。