2010-08-23 3 views
6

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

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

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

+1

_Constantly _ ??? –

ответ

3

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

От http://mindprod.com/jgloss/javawebstart.html

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

+6

Основываясь на опыте, я бы порекомендовал, чтобы баночки имели версию в имени файла.Это приводит к тому, что разные версии, имеющие разные URL-адреса, имеют одинаковый URL-адрес для разных версий, иногда приводили к тому, что банку не было должным образом обновлено в локальном кеше. –

+3

@ Thorbjørn: помимо этой причины номера версий в баночках, как правило, являются хорошей идеей: сделайте каждое имя файла уникальным. –

+0

спасибо за предложение, я это рассмотрю. – user381878

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

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

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

0

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

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

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

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

0

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

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

и прекратить гранатомет с:

System.exit(1) 
Смежные вопросы