Как написать самообновление Java Swing (не Java Web Start решение)?

  1. проверьте сервер на наличие каталога, содержащего обновления.
  2. скачать баночки в текущий каталог приложений.
  3. уведомить пользователя, чтобы перезапустить приложение.

Меня беспокоит перезапись старых файлов во время работы Java-приложения.

например, myapp.jar и другой jar библиотеки были обновлены и должны быть заменены путем загрузки новых версий в текущий каталог приложения и перезаписи в процессе. Есть ли способ добиться этого? Это позволит перезаписать?

2 ответа

Решение

Вы не можете рассчитывать на возможность перезаписи файлов JAR. Это, вероятно, будет работать в Linux, но определенно не в Windows.

Один из способов решить эту проблему - загрузить файлы jar во временную папку, а затем при запуске (до запуска JVM) переместить временные банки в папку загрузки приложения, а затем запустить их. Примечание: вы захотите как-то проверить содержимое банок после загрузки, чтобы убедиться, что они не повреждены. Md5sum будет работать.

Есть ли способ добиться этого?

Я ожидаю, что так. Но ваша работа - заставить его работать. А если серьезно, то согласие заключается в том, что вы заново изобретаете колесо.

Это позволит перезаписать?

Вы не можете рассчитывать на то, что сможете перезаписать используемый JAR-файл, потому что вы выполняете его в данный момент.

Существуют различные способы (*), с которыми вы можете обойти это, но они сводятся к тому, чтобы иметь какой-то специальный пусковой механизм, который заботится о загрузке, обновлении и так далее... а затем запускает или перезапускает ваше реальное приложение. И, в основном, это то, что делает JNLP... отсюда и наблюдение, которое вы предлагаете изобрести заново.

(* Я бы добавил, что эти способы довольно очевидны для меня. И если они не очевидны для вас, это еще одна причина, по которой вам лучше использовать JNLP. В противном случае вы рискуете получить квадратное колесо.)

Другие вопросы по тегам