You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行gradle sonar时遭遇OutOfMemoryError问题求助

解决Gradle Sonar扫描时Robolectric加载Jar的OOM问题

执行gradle sonar时出现如下内存溢出错误:

com.gmxx.cn.navigation.viewmodel.mainmap.GmpiCruiseViewModelTest > testPropertyListener FAILED
    java.lang.OutOfMemoryError: Failed to load /var/workspace/MISC.GMXX.Gradle.Apps.SonarQube.Scan.OnDemand/vendor/gm/packages/apps/GMXXX/.robolectric-dependencies/android-all-10-robolectric-5803371.jar
        at org.robolectric.shadows.ShadowArscApkAssets9.nativeLoad(ShadowArscApkAssets9.java:267)
        ...
        Caused by:
        java.lang.OutOfMemoryError: Java heap space

已确认Jar文件存在,且配置了export _JAVA_OPTIONS="-Xmx8g -XX:MaxMetaspaceSize=16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"环境变量,以下是可行的解决方案:

  • 为Gradle单独配置JVM参数
    全局_JAVA_OPTIONS可能被Gradle自身的配置覆盖,直接在项目根目录的gradle.properties中添加:

    org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    

    或者针对测试任务单独配置,在模块的build.gradle中添加:

    tasks.withType(Test) {
        jvmArgs '-Xmx8g', '-XX:MaxMetaspaceSize=16g', '-XX:+HeapDumpOnOutOfMemoryError', '-Dfile.encoding=UTF-8'
    }
    
  • 清理Robolectric缓存并检查依赖兼容性

    • 删除项目内的.robolectric-dependencies目录和用户目录下的~/.robolectric缓存,重新执行任务让Gradle拉取完整依赖(缓存损坏可能导致加载时内存异常)
    • 确认Robolectric版本与Android 10的兼容性,比如Robolectric 4.3及以上版本才支持Android 10,版本不匹配会引发内存相关问题
  • 拆分测试与Sonar扫描流程
    先单独执行测试任务gradle test,确认测试本身不会OOM。若测试正常,再执行Sonar扫描并指定已生成的测试报告路径,避免重复执行测试:

    gradle sonar -Dsonar.junit.reportPaths=build/test-results/test
    
  • 限制并行测试数量
    并行测试会大幅增加内存占用,在gradle.properties中添加以下配置关闭并行或限制并行数:

    org.gradle.parallel=false
    org.gradle.test.maxParallelForks=1
    
  • 检查系统可用内存
    用free -h查看宿主机内存情况,确保系统有足够空闲内存供JVM分配,若系统内存不足,即使配置了堆参数也无法生效

内容的提问来源于stack exchange,提问作者Ranger Zhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:33:33