Похоже, вы только что описали, как это сделать. Добавьте функцию обновления, которая проверяет сервер FTP или HTTP и загружает последнюю версию.
Помните, что вы не можете загрузить и перезаписать используемый файл. Итак, у вас есть два варианта дизайна, с которого я сижу:
Когда вы запускаете приложение, скопируйте все файлы jar и библиотеки в какую-либо папку / temp перед их запуском. Затем при загрузке обновления перезаписать файлы в исходном месте. При следующем запуске приложение будет использовать новые файлы.
При запуске приложения сначала запустите программу обновления. Подключите его к серверу и сравните все версии файлов. Он сможет перезаписать любой из файлов приложения, потому что не использует их. Он использует только флягу обновления. Как только это будет сделано, и все будет обновлено, запустите новый процесс из программы обновления с фактическим приложением. Вам также нужно будет вставить некоторый код, чтобы иметь возможность обновить jar-файл обновления. Либо сделайте так, чтобы основное приложение могло обновлять программу обновления, либо используйте первый метод и запустите программу обновления из копии jar программы обновления.
Помните, что при загрузке файлов вы должны загружать их во временную папку, а затем перемещать их в нужное место, когда они будут готовы. Это позволит вам никогда не оставлять приложение в «наполовину загруженном» состоянии.
Помимо этого, заставить это работать будет много испытаний. Удачи!