我希望能够在发布产品时将调试代码(详细的日志记录等)编译出来,但为了调试而编译进去。
我知道,如果我在常量上分支,编译器将删除该分支,这就是我想要的。所以我有一堂课:
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。