Замена опции Java -D [дубликат]

По вопросу «что мне делать с этим» может быть много ответов.

Более «формальный» способ предотвращения таких ошибок при разработке применяя дизайн по контракту в вашем коде. Это означает, что при разработке вы должны установить инварианты класса и / или даже предпосылки для функции и .

Короче говоря, инварианты класса гарантируют, что в вашем классе будут некоторые ограничения, которые не будут нарушены при нормальном использовании (и, следовательно, класс будет not получить в несогласованном состоянии). Предпосылки означают, что данные, данные как входные данные для функции / метода, должны соответствовать установленным ограничениям и никогда не нарушать их, а постулаты означают, что вывод функции / метода должен соответствовать установленным ограничениям снова не нарушая их. Условия контракта никогда не должны нарушаться во время выполнения программы без ошибок, поэтому дизайн по контракту проверяется на практике в режиме отладки, а отключен в выпусках , чтобы максимизировать развитую производительность системы.

Таким образом, вы можете избежать случаев NullReferenceException, которые являются результатом нарушения установленных ограничений. Например, если вы используете свойство объекта X в классе, а затем попытаетесь вызвать один из его методов, а X имеет нулевое значение, то это приведет к NullReferenceException:

public X { get; set; }

public void InvokeX()
{
    X.DoSomething(); // if X value is null, you will get a NullReferenceException
}

Но если вы установите «свойство X никогда не должно иметь нулевого значения» в качестве предпосылки для метода, вы можете предотвратить описанный ранее сценарий:

//Using code contracts:
[ContractInvariantMethod]
protected void ObjectInvariant () 
{
    Contract.Invariant ( X != null );
    //...
}

По этой причине Код Контракт существует для приложений .NET.

В качестве альтернативы дизайн по контракту может быть применен с использованием утверждений .

ОБНОВЛЕНИЕ: Стоит отметить, что этот термин был придуман Бертраном Майером в связи с его дизайном языка программирования Эйфеля .

6
задан doug 1 February 2011 в 19:42
поделиться

4 ответа

Это примерно то, как мы это делаем:

java $(tr '\n' ' ' < options_file) other args...

Здесь options_file содержит готовые значения -Dsomething или -Xsomething, по одному на строку. Команда tr просто заменяет каждую новую строку пробелом.

6
ответ дан 9000 26 August 2018 в 16:44
поделиться

Если вы используете Ant для lanuch для Java-процесса, ответ 9000 (плюс его комментарий к окну) будет работать, и вы можете иметь пусковую установку с разницей ОС.

Здесь есть поток StackOverflow здесь , который описывает, как определить ОС из ant

0
ответ дан Community 26 August 2018 в 16:44
поделиться

Я не думаю, что вы можете сделать это через командную строку (возможно, не с некоторыми хаками bash), но вы определенно можете сделать это программно:

Просто установите одно свойство -DmyPropertiesFile=/your/properties/file.properties, а затем прочитайте что с одной из перегрузок Properties.load(). После этого System.setProperties(yourProps) должен делать то, что вы ожидаете.

Конечно, для этого требуется, чтобы вы могли перехватить этот код достаточно рано, чтобы ваши свойства были доступны по мере необходимости (например, если main() метод ваш, это прекрасно).

7
ответ дан Costi Ciudatu 26 August 2018 в 16:44
поделиться

Некоторые опции:

  1. Оберните свои свойства в файле .jar, а затем попросите свои процессы прочитать этот файл свойств из getClass().getResourceAsStream()
  2. . Напишите пакетный файл для выполните ваши Java-процессы и либо явным образом перечислите параметры -D, либо создайте командную строку динамически.

Я решаю эту проблему обычно с помощью Spring (также для других причин) и PropertyPlaceholderConfigurer . Это позволяет мне указать одно или несколько мест для файлов свойств и изменяет конфигурацию Spring на месте.

3
ответ дан ig0774 26 August 2018 в 16:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: