【问题标题】:Catch the Stack Trace from a javac call从 javac 调用中捕获堆栈跟踪
【发布时间】:2011-08-06 07:18:18
【问题描述】:

我想做一些有趣的事情,我认为这将是一个好词。我想知道是否有一种方法可以使用 javac 任务从构建(目前我使用 ANT 构建)中捕获与堆栈跟踪相关的文本。

有点历史,我正在使用 CI 服务器 CruiseControl,并想编写一个适配器,该适配器将捕获来自失败构建的堆栈跟踪,并允许我解析哪些文件导致构建失败从 javac任务调用。因此,例如,如果将代码签入到具有来自另一个类的方法签名的存储库中,但该类从未添加到存储库中,则 javac 任务将失败,并在该类中出现找不到符号异常。我希望能够读取堆栈跟踪以获取导致构建失败的类。

关于如何做到这一点的任何想法?我不希望只读取日志文件并手动解析它(我觉得应该有更好的方法),但如果没有,我也可以走这条路。

【问题讨论】:

  • javac的stacktrace是什么?

标签: exception ant stack-trace javac


【解决方案1】:

首先,对于术语:编译器通常不会抛出异常(如果是,则可能是编译器中存在错误,或者您的文件系统出现问题,或类似情况),因此没有堆栈跟踪。

您在编译时看到的是编译器输出,包括任何编译器错误消息。

查看ant的javac任务,似乎没有办法将输出重定向到某处,这意味着只能通过解析整个ant run的输出来解析它。

使用 Compiler API (javax.tools) 并将 DiagnosticListener 添加到编译器运行时,您可能会做得更好。不过,您必须自己将其包装到一个 ant 任务中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多