Автоматически обновлять файлы JAR - PullRequest
6 голосов
/ 23 августа 2010

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

Я хочу предоставить функцию автоматического обновления. Настольное программное обеспечение постоянно проверяет одну внутреннюю систему на наличие новых версий файлов JAR.

Проблема теперь: Как заменить обновленные файлы JAR?

Ответы [ 4 ]

3 голосов
/ 23 августа 2010

Если вы развертываете свое приложение с помощью Java Webstart (JNLP), вы получаете этот механизм почти бесплатно ...

С http://mindprod.com/jgloss/javawebstart.html

Ключевым преимуществом Java Web Start является автоматическое обновление без необходимости каждый раз загружать всю программу.

1 голос
/ 23 августа 2010
  • Проще всего было бы проверять наличие обновлений при каждом запуске, загружать обновления и затем запускать приложение. Я думаю, что именно так работает Java Web Start (см. Ответ aioobes).

  • Более сложным было бы использовать для вашего приложения инфраструктуру netbeans или eclipse. Оба довольно сложны, и вам придется переписать ваше приложение для работы с ними. Это решение поддерживает обновления в реальном времени.

Насколько я знаю, нет простого способа обновить работающее приложение. Можно загрузить новые версии класса с другим загрузчиком классов, но невозможно выгрузить старые версии, пока на них есть ссылки.

0 голосов
/ 04 апреля 2017

Вы можете создать небольшой сервер и модуль запуска, который загружает самую новую версию, заменяет старую и запускает флягу с:

Runtime.getRuntime().exec("java yourjar -jar");

И вы запускаете лаунчер с помощью:

System.exit(1)
0 голосов
/ 23 августа 2010

Вы также можете сериализовать ваше состояние (сохранить его в памяти), а затем создать новый экземпляр ClassLoader, указывающий на новые файлы .jar. Затем снова сериализуйте ваше состояние, используя этот новый загрузчик классов. Вы только что изменили нижележащие файлы .jars в исполняемом продукте.

Обратите внимание, что вам не нужно менять загрузчик классов для всего только для части, которая фактически использует файлы .jar. Это может быть сложно сделать вывод, что это за части. И вы можете получить неприятные ошибки при связывании, если они сделаны неправильно. Итак ..

.. для простоты используйте WebStart или предварительный загрузчик, который обновляет .jars и затем запускает основное приложение (в основном то, что WebStart делает для вас).

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

...