Spring Boot Gradle项目jacocoTestReport任务执行失败求助
解决JacocoTestReport任务因字符编码报错的问题
问题分析
你遇到的java.lang.IllegalArgumentException: malformed input错误,大概率是Jacoco在处理资源文件时,默认字符集(通常为UTF-8)无法解析chcp1251编码的归档文件导致的。Jacoco生成报告时会扫描项目内的资源文件,若文件编码与默认字符集不匹配,就会触发这类解析错误。
解决方案
1. 为Jacoco任务指定字符集
Jacoco没有直接的字符集配置项,但可以通过设置JVM系统属性强制指定字符集,让Jacoco处理文件时使用chcp1251对应的Java编码名称windows-1251。修改build.gradle中的jacocoTestReport任务:
jacocoTestReport { dependsOn test // 指定字符集为windows-1251(对应chcp1251) jvmArgs '-Dfile.encoding=windows-1251' reports { html.enabled false xml.enabled true } }
2. 排除特定编码的资源文件
如果不需要统计这些归档文件的覆盖率,可以将其从Jacoco的扫描范围中排除,避免解析错误。调整jacocoTestReport任务添加排除规则:
jacocoTestReport { dependsOn test // 排除chcp1251编码的归档文件(根据实际文件名/路径调整) sourceSets { main { resources { exclude '**/*.zip' // 替换为你的归档文件路径或后缀 } } test { resources { exclude '**/*.zip' } } } reports { html.enabled false xml.enabled true } }
3. 转换归档文件编码
若条件允许,直接将chcp1251编码的归档文件转换为UTF-8编码,从根源上解决字符集不兼容问题。
验证
修改配置后,重新执行:
gradle clean build
若错误消失,说明配置生效。
内容的提问来源于stack exchange,提问作者Galua
相关产品推荐
相关产品推荐

