为什么在抛出异常时maven/junit只打印堆栈交易的"bottommost"行?

Why does maven/junit only print the "bottommost" line of a stack trade when an exception is thrown?

我在将 JUnit 与 Maven 结合使用时,在失败测试的输出中看到了一些奇怪的行为。具体来说,为 RuntimeException 打印的堆栈跟踪仅打印了“最底部”/最深的行。

例如:

[INFO] Running com.foo.MyTest
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.59 s <<< FAILURE! - in com.foo.MyTest
[ERROR] testBar(com.foo.MyTest)  Time elapsed: 0.588 s  <<< ERROR!
java.lang.NullPointerException
        at com.foo.MyTest.testBar(MyTest.java:132)

问题是 MyTest.java 的第 132 行没有出现 NPE。在那里,我调用了一些东西,它调用了其他东西,等等,大约 10 个方法调用 later 是我的 NPE。几乎如果他们获取整个堆栈跟踪并丢弃除其中的第一个方法调用之外的所有内容。当然,这使得无法在抛出实际异常的地方进行调试。

我正在 运行 使用命令 mvn package assembly:single 进行测试。 运行 -e 标志(“查看错误的完整堆栈跟踪”)仅打印“内部”堆栈跟踪,如下所示,没有我的任何代码:

at org.apache.maven.plugin.surefire.SurefireHelper.throwException (SurefireHelper.java:289)
at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution (SurefireHelper.java:161)
at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary (SurefirePlugin.java:364)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked (AbstractSurefireMojo.java:1041)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute (AbstractSurefireMojo.java:857)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

是不是某处配置有误?如果需要,很乐意提供更多信息进行调试。

谢谢。

有一个配置 <trimStackTrace>false</trimStackTrace> https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#trimStackTrace 默认为 true