Как мне установить переменные окружения из Java? Я вижу, что могу сделать это для подпроцессов с помощью ProcessBuilder. Однако мне нужно запустить несколько подпроцессов, поэтому я бы предпочел изменить среду текущего процесса и позволить подпроцессам наследовать ее.
Есть System.getenv(String) для получения одной переменной окружения. Я также могу получить Map полный набор переменных окружения с помощью System.getenv(). Но, вызывая put() это Map выдает UnsupportedOperationException - очевидно, они означают, что среда должна быть доступна только для чтения. И нет System.setenv().
Итак, есть ли какой-либо способ установить переменные окружения в текущем запущенном процессе? Если да, то каким образом? Если нет, то в чем обоснование? (Это потому, что это Java, и поэтому я не должен делать злые непереносимые устаревшие вещи, такие как прикосновение к моей среде?) А если нет, то какие-нибудь хорошие предложения по управлению изменениями переменных окружения, которые мне нужно будет передать нескольким подпроцессам?
Переведено автоматически
Ответ 1
Для использования в сценариях, где вам нужно установить определенные значения среды для модульных тестов, вам может пригодиться следующий хак. Это изменит переменные окружения во всей JVM (поэтому убедитесь, что вы сбросили все изменения после тестирования), но не изменит вашу системную среду.
Я обнаружил, что комбинация двух грязных взломов Эдварда Кэмпбелла и anonymous работает лучше всего, поскольку один не работает под Linux, а другой не работает под Windows 7. Итак, чтобы получить мультиплатформенный злой хак, я объединил их:
и передать любые ProcessBuilders через него перед их запуском.
Кроме того, вы, вероятно, уже знаете это, но вы можете запускать более одного процесса с одним и тем жеProcessBuilder. Итак, если ваши подпроцессы одинаковы, вам не нужно выполнять эту настройку снова и снова.