Создание разных версий сборки приложения Java - PullRequest
1 голос
/ 11 февраля 2010

Я создаю приложение Java (использую Ant с файлами build.xml и build.property). Теперь я хотел бы иметь возможность создать другую «отладочную» сборку, которая печатает несколько диагностических сообщений в System.err. Это достигается примерно так (упрощенно):

private static final boolean DEBUG = false;

public static void debug (String msg) {
    if (DEBUG) {
        System.err.println(msg);
    }
}

Можно ли влиять на значение постоянной DEBUG во время сборки? Я думаю, что я ищу, это эквивалент Java для определений C-препроцессора. В идеале у меня должна быть другая цель сборки в файле build.xml, которая установит для DEBUG значение true и создаст myapp-debug.jar в качестве вывода.

Связанное использование этого было бы именем файла конфигурации, который использует приложение. Это также указывается в качестве статической константы в исходном коде, но я бы предпочел, чтобы она настраивалась во время сборки.

Извините, если для вас все это очевидно, я не эксперт:)

Ответы [ 4 ]

6 голосов
/ 11 февраля 2010

Я бы порекомендовал log4j , если это единственная проблема, которая у вас есть.

Скорее всего, у вас есть другие настройки, такие как соединения с базой данных и очередями и т. Д. Все они должны быть перенесены в конфигурацию, которая может варьироваться в зависимости от среды.

2 голосов
/ 11 февраля 2010

Нередко управление параметрами ведения журнала осуществляется через файл конфигурации .properties.

Вы можете прочитать загрузку файла свойств и, если загрузка прошла успешно (так что файл не обязательно должен присутствовать), использовать свойство, которое контролирует ведение журнала.

1 голос
/ 11 февраля 2010

Я думаю, что было бы проще вывести переменную в текстовый файл свойств Java. затем вы можете загрузить определенное свойство из файла * .property или XML-файла, и от этого свойства зависит логика приложения.

что-то вроде этого в файле application.properties:

application.log.level=DEBUG

, который затем загружается с помощью метода load () класса Properties:

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;
}
1 голос
/ 11 февраля 2010

Java-сборка по принципу «построй один раз, запускай везде», поэтому javac не имеет препроцессора, и вы не можете изменить переменную во время компиляции любым другим способом, кроме одного определения переменная где-то, и изменение его в исходном файле перед компиляцией.

Если вы делаете это только для целей ведения журнала, вам, вероятно, следует заглянуть в пакет java.util.logging . Если вы хотите, чтобы во время выполнения выполнялись определенные элементы управления, которые можно отключить для производственных сред, ознакомьтесь с информацией о утверждениях Java .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...