Java(maven):如何知道错误的位置(无用的回溯)

时间:2016-02-19 13:50:05

标签: java maven

我正在用maven编写我的第一个项目(here)。当我使用mvn -Dtest=EchoTest test运行测试时,我得到 BUILD FAILURE

nonAcceptedTypeVerification(EchoTest)  Time elapsed: 0.044 sec  <<< ERROR!
java.lang.NullPointerException
    at EchoTest.initialize(EchoTest.java:50)

如何更准确地了解代码中的哪一行触发NullPointerExcepion? 换句话说:如何让Maven打印整个回溯?

我尝试mvn -e,并在target子目录中搜索。

修改

以下是引发NullPointerException的行(在EchoText.java中):

@Before
public void initialize() throws InterruptedException
{
    system = new EchoActorSystem();
    echo_actor = system.actorOf();  <-- line 50
}

关键是EchoActorSystem是一个非常复杂的类,方法actorOf可以完成大量工作,从system调用许多函数。例如,它调用super.actorOf()然后修复结果的某些属性,依此类推。 我通过添加许多Sysytem.out.println来搜索错误的行,但我确信这不是正确的工作方式。

2 个答案:

答案 0 :(得分:3)

mvn test -Dtest=EchoTest -DtrimStackTrace=false将为您提供完整的堆栈跟踪。

魔术是-DtrimStackTrace=false

Maven默认会将stacktrace缩小到您测试中出现的行。老实说,这是我第一次注意到这种行为,这对我来说是一个非常奇怪的默认(我可以理解为控制台输出,但是在surfire-reports XML报告中也是如此?)

答案 1 :(得分:1)

您将在target/surfire-reports目录中找到完整的堆栈跟踪,文件EchoTest.txt