我希望能够在发布产品时将调试代码(详细的日志记录等)编译出来,但为了调试而编译进去。

我知道,如果我在常量上分支,编译器将删除该分支,这就是我想要的。所以我有一堂课:

class Debug {
  public static final boolean ON=true;
}


我的调试代码在这样的分支中:

if (Debug.ON) {
    // Verbose / expensive logging goes here
}


我的问题是,在不实际编辑源文件的情况下,如何安排Debug.ON在编译时设置为true或false?

编辑:请注意,我不关心控制日志输出是否出现-我正在使用java.util.Logging,它可以解决这一问题。我更关心的是编译出任何昂贵的代码,这些代码正在准备永远不会得到输出的日志消息,或者进行生产模式中不需要的度量。

我想我可以有一个可以从模板或其他东西制作源文件的ant目标,但这似乎很容易。在C ++中,我可以定义一个可以与-D一起传递的预处理器符号-是否有Java等效项?还是其他更好的方法?

最佳答案

您可以做的是拥有两个Jar或类文件。

一个包含ON = true,另一个ON = false的Debug类。

然后,当您根据所需的调试状态进行编译时,可以在类/ jar文件中包含DEBUG或在类/ jar文件中包含DEBUG。

10-07 13:10
查看更多