Измените Выполняющийся файл Банки

Привет друзья Переполнения стека. У меня есть простая проблема, которой я боюсь, не имеет простого решения, и мне нужен совет относительно того, как продолжить двигаться. Я разрабатываю JAVA-приложение, упакованное как и исполняемый JAR, но он требует для изменения части его содержания файла JAR во время выполнения. На данном этапе я поразил проблему, потому что некоторая блокировка ОС предотвращение файла пишет в нее.

Важно, чтобы пользователь видел обновленную версию файла банки к этому времени выходы приложения, хотя я могу быть довольно гибким относительно того, как достигнуть этого. Чистое и эффективное решение очевидно prefereable, но мобильность является единственным трудным требованием.

Следующее является тремя подходами i, видят к решению проблемы, не стесняйтесь комментировать их или предлагать других.

  1. Скажите Java разблокировать файл JAR для записи (это не кажется возможным, но это было бы самое легкое решение),
  2. Скопируйте исполняемые файлы класса в tempory файл на запуске приложения, используйте загрузчик класса, чтобы загрузить эти файлы и разгрузить тех из начального файла JAR. (Не имел много опыта с classloaders, но надо надеяться JVM затем будет достаточно умна, чтобы понять, что исходный JAR nolonger используемый и тем самым разблокируйте его),
  3. Поместите Второй исполняемый Файл JAR в Первом, на запуске извлекают внутреннюю банку к e temporaryfile, вызывают новый процесс Java с помощью скопированного внутреннего JAR и передают его местоположение Внешнего JAR, сначала обрабатывают выходы, второй процесс modifys Внешняя необремененная банка. (Это будет работать, но я не уверен, что существует платформа независимый способ одного приложения Java, вызывающего другого),

Я знаю, что это - странный вопрос, но любая справка ценилась бы.

8
задан PinkyNoBrain 17 March 2010 в 16:53
поделиться

2 ответа

Один из вариантов:

Запишите программе измененную копию файла JAR.

Включите в файл JAR второй JAR с утилитой, которая при запуске удаляет исходный файл JAR и переименовывает измененную копию, чтобы она соответствовала оригиналу.

После выхода из вашей программы (и внесения изменений) извлеките эту утилиту и запустите ее в ее собственной JVM (используя Runtime.getRuntime (). Exec () ). Утилита будет ждать, пока сработает блокировка исходного немодифицированного JAR, а затем выполнит свою работу и завершит работу.

Пользователю кажется, что файл JAR обновляется при выходе (или достаточно близко!).

3
ответ дан 6 December 2019 в 00:06
поделиться

Честно говоря, я думаю, что ваш подход неправильный. Это просто не подходит для способа развертывания Java по умолчанию. Ваши измененные файлы просто должны будут сохраниться в файле db или xml где-то - это ЕДИНСТВЕННЫЙ разумный подход.

Все что угодно - это просто «борьба с ветром» - вы можете с некоторыми трудностями заставить его работать, но это в конечном итоге укусит вас или клиента.

1
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: