Использование JRebel в NetBeans

У меня есть приложение Java EE, работающее на финальной версии WildFly 10.0.0, имеющее следующую структуру (оно не использует Apache Maven).

введите здесь описание изображения

Я использую JRebel 6.4.1 для NetBeans (8.1). Он отлично работает в веб-приложениях (таким образом, не в корпоративных приложениях), но в корпоративных приложениях среда IDE продолжает отображать следующее сообщение: «Открыть свойства проекта для настройки удаленных серверов» при изменении файла Java в модуль EE или библиотека классов (как показано на рисунке выше) синхронизируются.

введите здесь описание изображения

Сообщение не появляется, когда изменения в веб-модуле синхронизируются.

Несмотря на сообщение, изменения, внесенные в модуль EE, распространяются при синхронизации модуля, но изменения в библиотеке классов не распространяются при синхронизации.

Удаленный сервер JRebel в настоящее время отключен, так как приложение работает на локальном хосте. Требуется ли настраивать URL-адрес сервера в диалоговом окне свойств проекта? Что такое URL в этом случае?

Любое другое предложение, если я что-то упустил?

введите здесь описание изображения


person Tiny    schedule 26.03.2016    source источник
comment
Если приложение работает локально, вам определенно не нужно использовать функцию удаленного сервера. Откройте панель JRebel и убедитесь, что второй столбец (столбец JRebel Remote) не отмечен ни для одного из модулей. Что касается изменений файла класса, которые не синхронизируются, убедитесь, что сборка при сохранении будет включена, что файлы .class в папке сборки действительно будут обновлены и что файл rein.xml для конкретного модуля, который вы изменяете, указывает на тот же каталог. Однако не тратьте слишком много времени на отладку самостоятельно. Свяжитесь с [email protected], и они помогут вам.   -  person Henri Viik    schedule 27.03.2016
comment
В свойствах проекта есть параметр «Компилировать при сохранении», который включен во всех модулях, включая библиотеку классов. Ни один из флажков во втором столбце панели JRebel не установлен. Библиотека классов была добавлена ​​к обоим модулям, а именно к модулю EJB и модулю WAR. Я сомневаюсь, что это недоступно для JRebel, и сообщение Открыть свойства проекта для настройки удаленных серверов является излишним.   -  person Tiny    schedule 27.03.2016


Ответы (1)


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

Кроме того, поскольку NetBeans 8.1 не обязательно обновляет файлы классов при сохранении в каталоге сборки во время работы проекта (по крайней мере, для автономных проектов), поэтому убедитесь, что классы обновлены, несмотря на то, что указано в флажке. Если файлы классов не обновляются, в компиляторе NetBeans также есть проблема, туманно описанная в их FAQ, что по существу означает, что NetBeans не выполняет автоматическую компиляцию старых классов, если существующие классы не компилируются внутренним компилятором, а выполняются Ant или Maven. Хитрость для ее решения заключается в следующем:

  • Выполните Clean, чтобы удалить существующие классы, а затем запустите, чтобы NB построил классы с помощью внутреннего компилятора.
  • Создайте пустой файл с именем .netbeans_automatic_build внутри папки build/classes или target/classes

Если это не поможет, как упоминалось ранее, свяжитесь с [email protected]. Чтобы ускорить процесс, отправьте им jrebel.log уровень трассировки в соответствии с руководством после воспроизведения проблема, имя класса, которое вы пытались перезагрузить, а также ссылку на этот вопрос SO.

person Henri Viik    schedule 27.03.2016
comment
Изменения распространяются автоматически без нажатия кнопки «Синхронизировать», чего я раньше не замечал. Единственная проблема теперь осталась, это библиотека классов, в которой ни Clean, ни Clean&Build тоже не помогают. После выполнения очистки или очистки и сборки сервер регистрирует такую ​​информацию, как JRebel: Reloading class 'entity.Inquiry'., JRebel: Reinitialized class 'entity.Rating_$$_jvstc82_20'. Таким образом, классы выглядят перезагруженными, но изменения в одном или нескольких из этих классов не отражаются. Во второй попытке имя файла, начинающееся с точки, не принимается операционной системой. - person Tiny; 27.03.2016
comment
Я сомневаюсь, что библиотека классов, добавленная к обоим модулям, а именно к модулю EJB (WildFly-ejb) и веб-модулю (WildFly-war), недоступна для JRebel, и изменения в этой библиотеке классов вряд ли будут распространены, если сама библиотека классов не будет повторно подключена к обоим модулям заново с нуля. - person Tiny; 27.03.2016
comment
Судя по строкам журнала, классы действительно перезагружаются, поэтому проблема не в том, что компиляция не происходит. Какие изменения вы делали? Изменения в конструкторе? Статический инициализатор меняется? Какие-то конкретные изменения фреймворка? - person Henri Viik; 27.03.2016
comment
Я внес изменения в классы сущностей JPA, хранящиеся в библиотеке классов, изменив некоторые атрибуты отношений на несуществующие отношения, ожидая, что будет выдано соответствующее исключение, но исключение не выдается, поскольку изменения, внесенные в библиотеку классов, не распространяются на развернутый EAR . Это требует повторного подключения библиотеки классов к обоим модулям с нуля. - person Tiny; 27.03.2016
comment
Я думаю, что, насколько я могу помочь, не видя jrebel.log, в этом случае вам лучше всего сразу обратиться в службу поддержки JRebel. Кроме того, введение неработающей конфигурации не всегда может быть лучшим способом проверки того, распространялись ли изменения, в зависимости от платформы. - person Henri Viik; 28.03.2016