Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建Java应用程序的不同构建版本_Java_Debugging_Ant - Fatal编程技术网

创建Java应用程序的不同构建版本

创建Java应用程序的不同构建版本,java,debugging,ant,Java,Debugging,Ant,我正在使用Ant和build.xml和build.property文件构建一个Java应用程序。现在,我希望能够创建一个不同的调试版本,将几个诊断消息打印到System.err。这是通过以下简化方式实现的: private static final boolean DEBUG = false; public static void debug (String msg) { if (DEBUG) { System.err.println(msg); } } 是否

我正在使用Ant和build.xml和build.property文件构建一个Java应用程序。现在,我希望能够创建一个不同的调试版本,将几个诊断消息打印到System.err。这是通过以下简化方式实现的:

private static final boolean DEBUG = false;

public static void debug (String msg) {
    if (DEBUG) {
        System.err.println(msg);
    }
}
是否可能在构建时影响调试常量的值?我想我要寻找的是C预处理器定义的Java等价物。理想情况下,我会在build.xml文件中有一个不同的构建目标,它会将DEBUG设置为true,并创建一个myapp-DEBUG.jar作为输出

与此相关的用法是应用程序正在使用的配置文件的名称。这在源代码中也被指定为一个静态常量,但我更希望它在构建时可以调整


很抱歉,如果这对您来说是显而易见的,我不是专家:

Java的构建原则是构建一次,到处运行,因此javac没有预处理器,您不能在编译时以任何其他方式更改变量,除非在某个地方有一个变量的单一定义,并在编译之前在源文件中更改它


如果您这样做只是为了记录日志,那么您可能应该查看这个包。如果您希望在运行时执行特定的控件,这些控件可以在生产环境中禁用,请查看有关Java的信息。

Java的构建原则是一次构建,到处运行,因此javac没有预处理器,除了在某个地方有一个变量的定义,并在编译之前在源文件中对其进行更改外,您不能在编译时以任何其他方式更改变量


如果您这样做只是为了记录日志,那么您可能应该查看这个包。如果您希望在运行时执行特定的控件,这些控件可以在生产环境中禁用,请查看有关Java的信息。

通过.properties配置文件控制日志记录选项的情况并不少见


您可以读取并加载属性文件,如果加载成功,因此文件不需要显示,则必须使用控制日志记录的属性。

通过.properties配置文件控制日志记录选项的情况并不少见


您可以读取并加载一个属性文件,如果加载成功,因此文件不需要显示,则必须使用一个控制日志记录的属性。

我认为将变量外部化为Java属性文本文件会更容易。然后可以从*.property文件或XML文件加载定义的属性,并使应用程序逻辑依赖于此属性

类似于application.properties文件中的内容:

application.log.level=DEBUG
然后使用Properties类的load方法加载:

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;
}

我认为将变量外部化为Java属性文本文件会更容易。然后可以从*.property文件或XML文件加载定义的属性,并使应用程序逻辑依赖于此属性

类似于application.properties文件中的内容:

application.log.level=DEBUG
然后使用Properties类的load方法加载:

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;
}
如果这是你唯一的问题,我建议你

您可能有其他设置,如数据库和队列连接等。这些都应该外部化到配置中,您可以根据环境的不同而有所不同

如果这是你唯一的问题,我建议你


您可能有其他设置,如数据库和队列连接等。这些都应该外部化到配置中,您可以根据环境的不同而有所不同

哦,很抱歉,当你回答这个问题时,我刚刚发布了一个类似的答案……为冗余感到抱歉。我认为你是对的:属性文件是一种方式。我错误地认为这只会把问题推到一个层次,因为这样我就可以硬编码属性文件的名称/位置,但是我记得我可以在类路径中查找它,包括应用程序JAR(如果有)。谢谢哦,很抱歉,当你回答这个问题时,我刚刚发布了一个类似的答案……为冗余感到抱歉。我认为你是对的:属性文件是一种方式。我错误地认为这只会把问题推到一个层次,因为这样我就可以硬编码属性文件的名称/位置,但是我记得我可以在类路径中查找它,包括应用程序JAR(如果有)。谢谢您对多个构建的要求是什么?为什么不只有一个构建,您可以在运行时打开或关闭调试?您对多个构建的要求是什么?为什么不只有一个构建,您可以在运行时打开或关闭调试?