Передача переменных среды в JVM независимо от платформы - PullRequest
24 голосов
/ 22 сентября 2009

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

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

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

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

System.getProperty("MY_ENV_VAR");

- это правильно?

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

Ответы [ 3 ]

24 голосов
/ 22 сентября 2009

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

String value = System.getenv("MY_ENV_VAR")

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

1 голос
/ 22 сентября 2009

Как я интерпретирую Учебник Java по этому заключается в том, что getenv работает независимо от платформы, но вы должны помнить, что переменные не имеют одинаковых имен на разных платформах. Поскольку вы, кажется, устанавливаете переменную самостоятельно, это не относится к вам.

0 голосов
/ 22 сентября 2009

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

...