创建Java应用程序的不同构建版本
问题描述:
我构建了一个Java应用程序(将Ant与build.xml和build.property文件一起使用)。现在我想能够创建一个不同的“调试”版本,它可以向System.err输出几条诊断消息。这是通过这样的事情来实现(简体):创建Java应用程序的不同构建版本
private static final boolean DEBUG = false;
public static void debug (String msg) {
if (DEBUG) {
System.err.println(msg);
}
}
是否有可能在构建时影响DEBUG常量的值?我想我要找的是C预处理器定义的Java等价物。理想情况下,我会在build.xml文件中有一个不同的构建目标,它将DEBUG设置为true,并创建一个myapp-debug.jar作为输出。
这个的相关用法将是应用程序使用的配置文件的名称。这也是在源代码中指定为静态常量,但我更愿意在构建时调整它。
很抱歉,如果这一切都是有目共睹的你,我不是专家:)
答
Java的构建以“打造一次,到处运行”,所以javac
没有一个预处理器,和你的原则不能在编译时以任何其他方式更改变量,而不是在某处定义一个变量的单个定义,并在编译之前在源文件中更改它。
如果您只是为了记录目的而这样做,那么您应该查看java.util.logging软件包。如果您想要在生产环境中禁用运行时执行的特定控件,请查看有关Java assertions的信息。
答
我认为将变量外部化为Java属性文本文件会更容易。您可以从* .property文件或XML文件加载定义的属性,并使应用程序逻辑依赖于此属性。
像这样在一个application.properties文件:
application.log.level=DEBUG
,然后通过使用属性类的负载()方法加载:
Properties props = new Properties();
props.load(new FileInputStream("application.properties"));
String debugLevel=props.getProperty("application.log.level");
boolean debug;
if (debugLevel!=null && debugLevel.equals("DEBUG")) {
debug=true;
}
您对多个版本的要求是什么?为什么不只有一个构建可以在运行时打开或关闭DEBUG? – 2010-02-11 20:55:43