Gradle构建卡住问题解决

针对Gradle构建过程中遇到的各种异常情况进行详细分析与解决,包括构建卡顿、内存溢出等问题,并提供具体解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gradle构建卡住问题解决

项目描述

项目代码量30W+,测试用例数1K+。有三个测试环境:黑盒环境,白盒环境,构建环境,预发布环境。

问题描述

项目一直使用Gradle进行构建(编译代码,执行测试用例,统计测试覆盖率,静态代码检查,打包等),之前一直没有问题。最近一次需求迭代完成之后像往常一样进行项目构建打包准备上线。但是在执行构建过程中老是卡在某个地方,遇到了各种异常情况。记录下来给有需要的人参考。

异常解决

遇到这种情况我们一般会启用Gradle的DEBUG模式,通过日志信息,排查问题。下面是遇到的一些问题:

  1. 执行构建一直卡在第一个测试用例的第一个测试方法不动

    问题解决:

    卡住不动从代码层面考虑的话一定是什么东西阻塞了代码的执行。观察日志发现测试用例在进行数据初始化的时候一直卡住不动。数据库阻塞了测试用例执行。

    查看构建库,发现来自同一个会话出现了很多锁,执行了什么导致了这么多锁呢?应是前面反复多次执行构建时,一直卡住把进程杀掉导致的。手动把数据库里的锁清理掉后。再次执行构建。

  2. 执行到某个测试用例时就又失败了,当前执行的测试方法提示initialize error然后就卡住很长时间不动了

    问题解决:

    祭出debug大刀,再跑一次,查看日志,发现抛出 java.lang.OutOfMemoryError: PermGen space. 内存非堆内存溢出了。这就好办啦。设置一下JVM参数就行了。于是在项目的gradle.properties文件里增加以下配置:

    -XX:MaxPermSize=256m
    

    OK,这次应该可以了吧,再次构建项目。

    喝杯茶,等待执行结果······

    我擦还是initialize error,非堆内存还不够?好吧,在增大一倍试试,配置如下:

    -XX:MaxPermSize=256m
    

    再次构建项目,等待中······

    Oh,no,还是initialize error,不应该啊,这次迭代没有增加多少测试用例和类啊,上个迭代还正常怎么这次就突然不行了呢,异常日志还是相同的**java.lang.OutOfMemoryError: PermGen space.**异常啊。这是怎么回事儿啊?

    难道JVM设置没有起作用?那来看一下吧,在本地启动项目构建任务,然后打开jvisualvm查看JVM信息。发现刚开始只有一个GradleDaemon的JVM,执行到test的时候出现GradleWorkerMain的JVM,怎么会有两个JVM呢?查看官方文档发现原来test任务会使用一个独立的JVM执行测试任务。前面的设置只是对GradleDaemon起作用。根据官方文档在test任务中加入以下配置:

    test {
        jvmArgs "-XX:MaxPermSize=1024m"
    }
    

    官方说明文档地址:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html

    再次执行构建,等待中······

    终于成功了。

  3. 中间还有很多坎坷基本上使用DEBUG模式都可以根据提示信息轻松解决,比如测试引入新的测试库,在构建环境没有同步,测试用例存在环境依赖等等。

总结

路漫漫兮其修远兮吾将上下而求索。

转载于:https://my.oschina.net/intellitor/blog/1803063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值