Как мне обновить JRE (или Runtime Image) из моего Java-приложения? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть приложение, которое состоит из JRE (или пользовательского образа времени выполнения, как его называют документы jlink), файла JAR и метода для запуска JAR на JRE (либо bash, либо batch-файле, либо exe-файле). или .app пакет).

Я хочу отправить обновления для приложения (которое работает, я могу подключиться к своему серверу и загрузить newJRE.zip и newJAR.jar), но я не знаю, как лучше заменить работающую в настоящий момент JRE на новый JRE.

Я попытался разархивировать новую JRE в отдельную папку, используя ProcessBuilder, чтобы перезапустить мой JAR на новой JRE, затем вызвав System.exit () для исходной JRE, а из новой JRE удалить старую JRE и скопировать новый JRE в исходное местоположение, и, наконец, снова запустить мое приложение на этом JRE. Это не сработало (в Windows я еще не пробовал в Linux или Mac), потому что новая, перезапущенная JRE, кажется, удерживает блокировки файлов (или дескрипторы?) Для некоторых файлов в старой JRE, так что это может не удаляйте их. Я также попытался запустить пакетный файл, который удаляет старый JRE и заменяет его новым, но опять же он не может удалить все файлы в старом JRE.

Можно ли это сделать на Java или мне нужно написать логику обновления для каждой платформы отдельно? Какой лучший способ сделать это?

...