使用IDEA构建项目时出现的一个异常和解决方案

开发工具 同时被 2 个专栏收录
5 篇文章 0 订阅
16 篇文章 0 订阅

当把开发环境从windows平台换到mac平台之后,总是出现这样那样的问题,也不知道是我的问题还是这些工具的问题,总之就是需要花费大量时间来处理。

出现问题

使用idea尝试运行项目,点运行,之后进入build阶段,然后卡死在parsing java的过程上,java进程高强度运行数十分钟,然后出现Error:java:Compilation failed:internal java compiler error或者GC overhead limit exceeded等异常后才会停止。

在之前的文章里提到过,通过在命令台手动手动执行mvn命令进行compile和install都是能够成功的。

带着诸多的不解,开始寻找解决问题的途径。

解决路径

第一步

首先常规做法是先参考一下网上的一些解决方法,很多文章都提到是idea内部配置的jdk版本和项目实际版本不一致,导致编译出现异常,排查后发现这并不是自己的问题。

第二步

但能确定的是,这是idea编译过程中的问题。

于是按照对异常字面的理解,尝试扩展idea VM和编译器使用的内存,发现只是延长了问题出现的时间,依然无法解决问题。

第三步

之后又在stackoverflow看到说可能是lombok或者是mapstruct版本兼容性上引起的问题,要么换依赖的版本,要么就要在启动参数里加上一些限制。

由于是公司的项目,有问题的依赖肯定是被替换过的,所以只能是尝试通过添加虚拟机参数 -Djps.track.ap.dependencies=false来解决问题,依然无效

第四步

也怀疑过是idea版本的问题,于是尝试过更换多个版本的idea,还有一些关于idea的具体配置的修改,发现依然不能解决问题

第五步

等到过了最初那段急躁的时间,冷静下来以后想到,既然是在build阶段出现问题,那么能不能把before launch里的build流程取消掉或者是替换成别的操作呢?

于是先手动执行mvn compile编译项目,之后去掉configuration中before launch里的build操作之后,发现项目终于能够成功运行起来了。

这时才意识到,是idea build和maven compile之间是存在一些差别的。

之后一段时间内就选择使用手动执行mvn compile命令,在写完代码之后手动编译一遍,写完单元测试以后也是手动编译一遍,这样再执行就没有问题了,至少是解决了项目启动不了的燃眉之急。

到这会儿也已经是凌晨了,于是结束了一天的折磨选择之后再来处理。

寻根溯源

第二天一早,实际写了写代码,发现这种方式实在是太过麻烦,每次debug改完什么地方都不能直接执行,而且使用idea的recompile也无效,只能在命令行执行重新编译。实在是太不好用了,还是需要去解决才行。

不过这时候其实已经发现问题出在idea的编译器和生成器上了,所以找到了一篇文章来自w3c school的文章《IntelliJ IDEA编译器和生成器》来详细的了解了一下这两者。

首先idea提供了编译(Compile)和构建(Build)的方法:

  • 编译:编译指定范围的内的源文件

  • 生成:生成的过程就比较复杂了。首先自上次编译后修改的整个项目中的所有源文件都将被编译。相关源文件(如果适用)也将被编译。此外,还将执行与修改的源上的编译或生成过程相关的任务。

而idea支持的编译器包括:

  • Javac。此编译器取自当前分配给项目的 Java SDK。

  • Eclipse。IntelliJ IDEA 与 Eclipse 编译器捆绑在一起。

由于默认使用的都是javac,于是果断将javac编译器更换成Eclipse编译器重新进行build操作,到这时终于能够进行build操作了。

到这里,怀疑出问题的对象就变成了javac,而javac是和java版本绑定的,所以可能是jdk版本的问题,打算另外找其他时间再来验证这个疑问。

后记

我想这个问题遇到的人应该不多,因为在网上搜索解决方案时,大部分的信息对我来说都没有用,很多雷同的文章一篇一篇的看过来着实浪费了很多时间,所以聊以一篇短文记录自己解决这个问题的方法,希望能在某个时刻帮助到需要的人。

不过也要对自己进行一下反思,第一时间去搜索引擎求助固然是最简单的方法,但是这导致缺少了事前对问题分析的过程,当遇到的是简单的问题时,能快速找到解决方案;但如果问题并不常见,网络上有效的信息不够时,缺少分析问题成因的过程很有可能导致自己像一直无头苍蝇一样到处乱撞,然后当最终解决问题后又来恍然大悟发现其实问题很简单,如果对上面解决问题的流程进行简单的复盘就能发现,解决问题的五步里,前四步都是乱走的,这是需要改进的地方。

思考的过程是不可或缺的,永远不能放弃思考,永远不能遗忘思考。

参考资料

https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-wpng2f08.html

  • 0
    点赞
  • 2
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 2 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Armour__r

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值