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