Hello Stack Overflow друзья. У меня есть простая проблема, которая, боюсь, не имеет простого решения, и мне нужен совет о том, как действовать. Я занимаюсь разработкой java-приложения, упакованного в виде исполняемого JAR-файла, но для него требуется изменить часть содержимого JAR-файла во время выполнения. На этом этапе я столкнулся с проблемой, потому что некоторые ОС блокируют файл, предотвращая запись в него.
Крайне важно, чтобы пользователь видел обновленную версию файла JAR ко времени выхода приложения, хотя я могу быть довольно гибким в отношении того, как этого добиться. Чистое и эффективное решение, очевидно, предпочтительнее, но мобильность является единственным жестким требованием.
Ниже приведены три подхода к решению проблемы, которые вы можете прокомментировать или предложить другим.
- Скажите Java, чтобы разблокировать файл JAR для записи (это не представляется возможным, но это было бы самое простое решение)
- Скопируйте исполняемые файлы классов в временный файл при запуске приложения, используйте загрузчик классов, чтобы загрузить эти файлы и выгрузить их из исходного JAR-файла. (Не имел большого опыта работы с загрузчиками классов, но, надеюсь, тогда JVM будет умным Достаточно, чтобы понять, что оригинальный JAR используется дольше, и поэтому разблокируйте его)
- Поместите второй исполняемый JAR-файл внутрь First, при запуске извлеките внутренний jar-файл во временный файл, вызовите новый java-процесс, используя скопированный внутренний JAR-файл, и передайте ему расположение внешнего JAR-файла, первый процесс завершится, второй процесс модифицирует Внешняя банка не заполнена. (Это сработает, но я не уверен, что существует одно платформенное решение, при котором одно Java-приложение вызывает другое)
Я знаю, что это странный вопрос, но любая помощь будет признательна.