Gradle: горячее развертывание изменений в зависимости

У меня есть среда, в которой у меня есть веб-приложение java (spring mvc), разрабатываемое командой из n участников на intellij с gradle в качестве агента сборки. У этого проекта есть зависимость, которая также разрабатывается той же командой. Зависимость публикуется в репозитории, откуда она читается приложением Spring mvc. Что происходит, так это то, что каждый раз, когда происходит изменение кода зависимости, код приложения Spring должен быть обновлен, чтобы включить последнюю версию кода зависимости. Итак, вопрос в том, есть ли способ выполнить замену кода во время выполнения в коде зависимости и заставить его повлиять на сеанс отладки, в значительной степени аналогично тому, что делает JRebel, за исключением того, что ему нужно делать это в коде зависимости.

Будем очень признательны за любые мнения по этому поводу.

P.S- Я пометил gradle и jrebel, потому что может быть способ добиться этого с помощью этого технического стека.


person Aspirant    schedule 19.06.2014    source источник
comment
Зачем идти на такое? Не проще ли создать скрипт для обновления и повторного развертывания зависимых проектов?   -  person Bart    schedule 19.06.2014
comment
Что ж, это можно сделать. Но все дело в том, что во время отладки можно изменить и поменять местами код зависимости. Я не думаю, что с помощью сценария этого можно достичь. Может я ошибаюсь. Пожалуйста, порекомендуйте.   -  person Aspirant    schedule 19.06.2014
comment
Я не знаю каких-либо инструментов, которые могут сделать то, о чем вы спрашиваете. Неужели повторный запуск приложения - это слишком много работы? Если версия зависимости имеет суффикс -SNAPSHOT, maven всегда будет извлекать / загружать последнюю версию из репозиториев.   -  person Bart    schedule 19.06.2014
comment
Не думаю, что мне нужен инструмент. Возможно, требуется другой подход к тому, как приложение Spring читает код зависимости.   -  person Aspirant    schedule 19.06.2014
comment
-SNAPSHOT - вещь знатока. Мне не повезло с этим в градиенте. Перезапуск приложения - это то, что сейчас делается. Но я ищу лучший (более быстрый) способ сделать это. Я пытаюсь избежать описанной здесь ситуации i.stack.imgur.com/gtCJT.jpg   -  person Aspirant    schedule 19.06.2014
comment
Если вы превратите приложение и библиотеку в одну многопроектную сборку Gradle, вы можете импортировать все это в IntelliJ и использовать горячую замену кода в отладчике.   -  person Peter Niederwieser    schedule 21.06.2014


Ответы (1)


JRebel может отслеживать банки, хотя это не очень эффективно. В файле конфигурации rebel.xml вы можете указать тег ‹jar›, указывающий в расположение зависимости в файловой системе.

Лучшим подходом будет фактическая работа с источниками, чтобы вы развернули зависимость с помощью rebel. xml, который указывает на место, где находятся скомпилированные классы, а затем работает с зависимостью, как с источником, выполняя извлечение / обновление из системы управления версиями при необходимости и компилируя изменения. Если ваш компилятор инкрементный, он будет компилировать только измененные классы, и JRebel не придется перезагружать слишком много классов одновременно, а только изменения.

person Anton Arhipov    schedule 19.06.2014
comment
Антон, я как бы частично согласен с твоим комментарием. Развертывание зависимости через rebel.xml похоже на то, что теперь я разделяю ответственность за развертывание зависимостей в двух местах. Хотя это определенно кажется выполнимым. - person Aspirant; 20.06.2014