Как реализовать автообновление в Java?

Все: у меня возникла проблема, мое приложение состоит из нескольких файлов jar и некоторых других файлов, все они расположены в одном каталоге. Я планирую реализовать функцию автоматического обновления. Когда приложение узнает, что на сервере есть новая версия, оно загрузит zip-файл во временный каталог. После загрузки он спросит клиента, хочет ли он установить его. Если да, мое приложение завершится, и мне нужно разархивировать zip-файл и перезаписать все файлы в исходном каталоге. Теперь мне интересно:

Как я могу разархивировать файл и перезаписать каталог? Создать скрипт (значит нужно написать bat для винды и шелл для других платформ)? Создать класс Java для этого?

Как я могу запустить этот класс script/java после выхода?

После завершения работы, как мне удалить установщик? Хранить его во временном каталоге и проверять при запуске новой версии приложения?


Из более поздних комментариев:

Я знаю, что JWS — хороший выбор, но по причине отказа моего босса я не могу его использовать.


person icespace    schedule 04.05.2012    source источник
comment
Java Web Start — это стандартное Java-решение поставленной вами проблемы. Вы вряд ли получите другой ответ, если только не дадите техническое ограничение, почему ваш начальник это отрицает.   -  person Mark O'Connor    schedule 05.05.2012


Ответы (2)


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

Вы можете создать небольшой файл jar, который будет обрабатывать процесс обновления. Это может быть часть первоначального приложения (при условии, что оно не будет обновляться) или оно может быть частью пакета обновлений (тогда вы также можете обновить его).

Таким образом, ваше приложение загружает zip, распаковывает его во временный каталог и запускает программу обновления, а затем завершает работу. Программа обновления копирует новые банки поверх старых.


И все же лучше не изобретать велосипед. Рассмотрите возможность использования JWS: он предоставляет больше возможностей и требует меньше усилий для реализации. Должны быть веские причины для отказа JWS. Вы должны убедить своего босса, объяснив преимущества использования JWS.

person Alexey Ivanov    schedule 05.05.2012
comment
Спасибо вам всем. С этим покончено. Я написал класс для установки. Меня разветвит хук выключения в приложении. Конечно, JWS великолепен, я надеюсь, что в следующий раз смогу сделать это с помощью JWS. - person icespace; 11.05.2012

Поскольку приложение. имеет графический интерфейс (судя по тегу Swing), разверните его с помощью Java Web Start:

Java Web Start (JWS) — это технология корпорации Oracle, используемая для запуска многофункциональных клиентских приложений (Swing, AWT, SWT) для настольных компьютеров непосредственно из сети или интернет-канала. Он предлагает установку «в один клик» для платформ, поддерживающих Java.

JWS предоставляет множество привлекательных функций, включая, помимо прочего, экраны-заставки, интеграцию с рабочим столом, сопоставление файлов, автоматическое обновление (включая ленивую загрузку и программный контроль обновлений), разделение исходных файлов и загрузки других ресурсов по платформам. , архитектура или версия Java, конфигурация среды выполнения (минимальная версия J2SE, параметры времени выполнения, ОЗУ и т. д.), простое управление общими ресурсами с помощью расширений.

person Andrew Thompson    schedule 04.05.2012
comment
Спасибо за совет, я знаю, что JWS - хороший выбор, но по какой-то причине я не могу его использовать. - person icespace; 04.05.2012
comment
На самом деле, причина довольно проста, мой босс отрицал. 8-) - person icespace; 04.05.2012
comment
Теперь самое время спросить вашего босса - Почему? поскольку возможные альтернативы будут зависеть от ответа. - person Andrew Thompson; 04.05.2012