Java System.getEnv()
В Mac OSX и в Linux CentOS я вставляю новую переменную системной среды (например, "MYAPP"), используя.bashrc & .bash_profile. Я даже перезапустил свой ноутбук (Mac) и мой сервер (Linux).
Когда я использую командную строку "env", эта переменная среды показала правильное значение. Но почему-то каждый раз, когда я пытаюсь получить его в приложении Java (настольном приложении, веб-приложении, EJB или сервлете, любом другом приложении Java) в Mac или Linux, эта переменная среды ("MYAPP") не извлекается.
Я попытался перебрать все переменные окружения, которые может извлечь Java, и оказалось, что он извлекает все переменные окружения, кроме "MYAPP". Это очень странно.
Кто-нибудь знает, как решить эту проблему?
4 ответа
После определения и экспорта переменной среды. Запустите вашу IDE из того же терминала.
Ты export MYAPP=...
? Экспорт переменной делает ее доступной для дочерних процессов, например, для запуска java вашей оболочкой.
В Linux, если вы только установите переменную (или экспортируете ее) в сеансе bash, она будет доступна для своего рода "вспомогательного" сеанса, который доступен только для только что выполненной команды, и ничего больше.
Вы, вероятно, могли бы использовать оператор точки в bash (также называемый командой "source"). Со страницы:
Когда скрипт запускается с использованием `source', он запускается в существующей оболочке, любые переменные, созданные или измененные скриптом, останутся доступными после его завершения.
Так что вы можете попробовать сделать. экспортируйте VARIABLE= значение, а затем запустите вашу Java-программу. Это похоже на установку переменной в терминале Windows, а затем открытие нового терминала и ожидание появления env var. Не будет
Таким образом, вы говорите bash: "эта команда должна быть доступна в этом конкретном сеансе (процесс сеанса)". В противном случае вы говорите ему: "установите этот env var для сеанса bash, который закончится после того, как я запустил эту команду экспорта", поэтому он не будет существовать, когда вы запустите вашу Java-программу.