Горячая замена файлов JAR в Java

У меня есть два фляги. One.jar содержит метод main для запуска процесса, а другие two.jar содержат только файлы классов.

В One.jar я ссылался на two.jar в его манифестированном classpath.

One.jar содержит механизм для динамической загрузки классов с использованием Class.forName()

Я хочу развернуть One.jar только один раз за всю жизнь. Не буду вносить в него какие-либо изменения.

Изменения будут происходить только в два.jar

Я хочу выполнить горячую замену two.jar с обновленным two.jar. Я также видел другие сообщения о горячей замене, такие как OSGi, горячая замена для ANT, но мне ничего не помогает.

После небольшого исследования выяснилось, что JRebel делает это действительно лучше, но я действительно не знаю, как интегрировать его с этими банками? Я застрял на этом почти 2 дня. Просто нужно несколько шагов информации, чтобы сделать это. Кто-нибудь, помогите мне, пожалуйста... Это действительно очень важно для меня... Спасибо

2 ответа

Решение

Привет всем, у меня наконец есть решение для этого. Я действительно не знаю, что придумаю такое простое решение. Я взял идею @Thorbjørn Равн Андерсен. Все, что я сделал, сначала получил временную метку файла jar, а затем загрузил jar с помощью URLClassLoader. Если временная метка файла jar изменяется (т.е. когда я заменяю jar на обновленный jar), то я удаляю старый объект URLClassLoader с помощью close() и снова загружаю новый jar с помощью URLClassLoader. Единственное, что я должен проверять каждый раз, это то, меняется ли отметка времени банки. Надеюсь, что этот ответ поможет другим людям. Спасибо всем за вашу поддержку.

Поскольку я напрямую связан с JRebel (я менеджер по продукту), я, вероятно, могу дать некоторые указания по настройке.

Чтобы обновить классы в JAR с помощью JRebel, поместите специальный файл конфигурации rebel.xml в тот файл two.jar, который будет указывать на каталог, в котором находятся скомпилированные классы файла two.jar.

     one.jar ---> two.jar
                   `- rebel.xml   // points to two/project/classes

Вот документ с примерами: http://manuals.zeroturnaround.com/jrebel/standalone/config.html

В зависимости от того, как настроен ваш проект, плагины IDE помогут автоматизировать это.

Обратите внимание, что если вы хотите выполнить эту процедуру в действующей системе, то JRebel не является инструментом для такого рода целей.

Другие вопросы по тегам