2009-09-22 2 views
18

Я разрабатываю приложение J2EE, которое работает в JBoss на компьютере под управлением Windows Vista, но приложение будет работать на Linux-машине. Есть ли способ передать значение переменной среды независимым от платформы способом?Передача переменных окружения в JVM, независимо от платформы

Я думаю (но я не уверен) платформа чувствительный путь будет:

-Denv_var=%MY_ENV_VAR% (Windows) 
-Denv_var=$MY_ENV_VAR (Linux) 

и оттуда я бы доступ к значению (в Java), используя

System.getProperty("MY_ENV_VAR"); 

- это верно?

Javadoc for System.getenv(String name), похоже, подразумевает, что метод зависит от платформы, но я не понимаю этого. Могу ли я просто пропустить передачу переменной в JVM полностью и использовать getenv() после использования установки значения для переменной среды с помощью ОС?

+1

Является ли ваш пример неправильным? Разве это не должно быть -DMY_ENV_VAR, если вы собираетесь использовать System.getProperty («MY_ENV_VAR»); –

ответ

19

System.getenv() не зависит от платформы сам по себе. Используя приведенный выше пример, вы можете, безусловно, написать

String value = System.getenv("MY_ENV_VAR") 

и он будет работать как на Linux, так и на Windows. Нет причин поместить это в свойство системы Java. Тем не менее, «зависимая от платформы» часть getenv() заключается в том, что разные операционные системы используют разные переменные среды, такие как PATH для Windows vs path в Linux. Но пока вы используете свои собственные переменные и назовите их последовательно (например, в верхнем регистре), все будет в порядке.

+0

Черт, избили меня до ответа :) –

+0

Итак, если я использую 'System.getEnv()' мне не нужно ничего пропускать в JVM? –

+0

Это просто для чтения переменных окружения. Да, вы все равно должны их установить. –

1

Как я интерпретирую the java tutorial on this, так это то, что getenv работает независимым образом от платформы, но вы должны иметь в виду, что переменные неоднократно называются на разных платформах. Поскольку вы, кажется, устанавливаете var самостоятельно, это не относится к вам.

0

Да - getEnv() будет просто возвращать имя переменной окружения, и вы можете установить его любым способом, подходящим для платформы, на которой вы работаете (обычно через пакетный файл запуска на Win32). Хорошая практика - отказаться от разумных настроек по умолчанию на основе платформы (путем проверки System.getProperty("os.name")), если это возможно, вы хотите, чтобы ваши пользователи не беспокоились о необходимости возиться с переменными окружающей среды для запуска вашего программного обеспечения.

Смежные вопросы