如何在JaCoCo Failsafe测试执行中禁用栈跟踪截断
禁用Maven单元测试栈跟踪截断的解决方案
你之前配置不生效的核心原因是
trimStackTrace参数归属错误:
- 该参数是单元测试执行插件
maven-surefire-plugin的专属配置,你配置到了负责生成测试报告的maven-surefire-report-plugin、负责集成测试的maven-failsafe-plugin以及覆盖率插件jacoco上,自然不会生效。failsafe插件仅作用于Maven的integration-test阶段,你执行的test阶段的单测完全由surefire插件接管。
方案1:修正pom中maven-surefire-plugin配置
在pom的build/plugins节点下添加/修改maven-surefire-plugin的配置,添加trimStackTrace=false即可:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>替换为当前项目使用的surefire版本号</version> <configuration> <trimStackTrace>false</trimStackTrace> </configuration> </plugin>
方案2:通过全局属性配置(无需修改插件配置,优先级更高)
如果不想改动插件配置,直接在pom的properties节点下添加全局属性即可生效,不需要调整任何插件配置:
<properties> <maven.test.trimStackTrace>false</maven.test.trimStackTrace> </properties>
方案3:测试代码内兜底打印完整栈(无需修改任何Maven配置)
如果上述Maven配置都无法生效,可以直接在测试代码中手动捕获异常打印完整栈,不受Maven日志配置限制:
@Test public void test() { try { // 原有测试逻辑 } catch (Throwable t) { t.printStackTrace(); throw t; } }
该方法绕过了slf4j日志框架的级别限制,直接输出到标准错误流,就算日志级别设为warn也能正常输出完整栈信息
内容的提问来源于stack exchange,提问作者ScrappyDev
相关产品推荐
相关产品推荐

