Как написать самообновление Java Swing (не Java Web Start решение)?
- проверьте сервер на наличие каталога, содержащего обновления.
- скачать баночки в текущий каталог приложений.
- уведомить пользователя, чтобы перезапустить приложение.
Меня беспокоит перезапись старых файлов во время работы Java-приложения.
например, myapp.jar и другой jar библиотеки были обновлены и должны быть заменены путем загрузки новых версий в текущий каталог приложения и перезаписи в процессе. Есть ли способ добиться этого? Это позволит перезаписать?
2 ответа
Вы не можете рассчитывать на возможность перезаписи файлов JAR. Это, вероятно, будет работать в Linux, но определенно не в Windows.
Один из способов решить эту проблему - загрузить файлы jar во временную папку, а затем при запуске (до запуска JVM) переместить временные банки в папку загрузки приложения, а затем запустить их. Примечание: вы захотите как-то проверить содержимое банок после загрузки, чтобы убедиться, что они не повреждены. Md5sum будет работать.
Есть ли способ добиться этого?
Я ожидаю, что так. Но ваша работа - заставить его работать. А если серьезно, то согласие заключается в том, что вы заново изобретаете колесо.
Это позволит перезаписать?
Вы не можете рассчитывать на то, что сможете перезаписать используемый JAR-файл, потому что вы выполняете его в данный момент.
Существуют различные способы (*), с которыми вы можете обойти это, но они сводятся к тому, чтобы иметь какой-то специальный пусковой механизм, который заботится о загрузке, обновлении и так далее... а затем запускает или перезапускает ваше реальное приложение. И, в основном, это то, что делает JNLP... отсюда и наблюдение, которое вы предлагаете изобрести заново.
(* Я бы добавил, что эти способы довольно очевидны для меня. И если они не очевидны для вас, это еще одна причина, по которой вам лучше использовать JNLP. В противном случае вы рискуете получить квадратное колесо.)