У меня есть отдельное приложение, упакованное в JAR, которое при запуске распаковывает себя во временный каталог и порождает дочерний процесс в этом каталоге.Причина в том, что какой-то сторонний код и конфигурация предполагают, что файлы данных находятся относительно текущего рабочего каталога, а java не имеет метода chdir (), поэтому единственный способ - переключить рабочий каталог для дочернего процесса.
Все работает нормально, кроме системных свойств.Оператор может решить указать некоторые системные свойства в командной строке, как стандартные, так и относящиеся к сторонней конфигурации:
java -Djava.io.tmpdir=/temp -Dsomething=else -jar foo.jar (parameters)
Системные свойства, доступные для родительского процесса Java, по умолчанию не распространяются.ребенку.Я должен сделать это сам.И здесь я сталкиваюсь с препятствиями: у меня нет возможности сказать, какие свойства установлены оператором, а какие инициализируются по умолчанию JVM.
Возьмите тот java.io.tmpdir.Если оператор предоставил это, у него есть веская причина для этого (возможно, расположение по умолчанию «диск заполнен»).Я должен установить его на дочерний процесс, иначе он потерпит неудачу.Но как мне узнать, пришло ли это от оператора?Это может быть просто значение по умолчанию.
Я могу попытаться установить все доступные системные свойства для дочернего процесса.Это занимает длинный список, и, что еще хуже, не работает в некоторых средах, где длина командной строки ограничена.
Единственный обходной путь, который я нашел до сих пор (довольно злой), - сначала запустить другой дочерний процесс., без каких-либо аргументов, и пусть он вернет к родителю все системные свойства, которые он имеет.Значения, совпадающие с теми, которые имеет родительский, являются значениями по умолчаниюОстальные должны быть переданы рабочему дочернему процессу.
У кого-нибудь есть лучшая альтернатива?