2011-12-04

Памятка по установке JRebel

Прежде всего хочу сказать, что настраивать-то особо нечего ;-)
Можно посмотреть презентацию "для вдохновения" zeroturnaround.com/jrebel/presentations.

Я использую IntelliJ IDEA, для других IDE инструкция может слегка отличаться, см zeroturnaround.com/resources .

1. Идем в IDE settings | plugins и находим среди доступных JRebel Plugin, Download and Install, Apply (restart).

С сайта zeroturnaround.com/jrebel/current ничего качать не нужно, все включено в плагин.


2. В IDE settings появится пункт JRebel, там нажимаем Launch JRebel Configuration Wiazard...
Первый пункт активация - проще и дешевле начать с evolution.
Второй пункт license пропускаем -  evolution сам сгенерирует и активизирует лицензию на 30 дней.


3. пункт Choose settings выбираем какая IDE используется, тогда следующие пункты будут показывать инструкции по мелкой оптимальной подстройке этой IDE.

Следует выставить три 'галочки' в IDE по инструкциям в последующих пунктах.

Закончили с установкой и конфигурированием.


4. В Project view проекта в pop-up menu выбираем Generate rebel.xml

Далее как сделал я и как удобно мне, возможно вам тоже понравится :-)



5. Сохраняем rebel.xml в [webroot]/WEB-INF/classess
Это единственный, довольно простой конфигурационный файл JRebel.

Основные настройки описаны в zeroturnaround.com/jrebel/how-to-configure-rebel-xml
На всякий случай ссылка на полное описание (скорее всего не понадобится): zeroturnaround.com/jrebel/configuration

Настройки по умолчанию мне не подошли т.к.
a. я использую Apache Click, который при старте достает некоторые ресурсы в [webroot], а так как по умолчанию используется [webroot] в исходниках, то система контроля версий обнаруживает кучу новых файлов.

b. в проекте много модулей, которые компилируются в jar-ы и кладутся в [webroot]/WEB-INF/lib

Поэтому пришлось прописать папку target/название_web_app - как [webroot],
и несколько target/production/название_модуля - как путь для поиска классов, где:
* target стандартное maven-название папки куда все компилируется,
* production - папка принудительно создаваемая IDEA,
* название_web_app - путь который вы прописали в Web Application exploded artifact, e.g. voip, smsrouter, etc,
* название_модуля - IDEA создает для каждого модуля свои подпапки в production.

Итоговый файл:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

 <classpath>
  <dir name="C:/j/voip.dev/bh/target/production/core"/>
  <dir name="C:/j/voip.dev/bh/target/production/demo"/>
  <dir name="C:/j/voip.dev/bh/target/production/mca"/>
  <dir name="C:/j/voip.dev/bh/target/production/tts"/>
 </classpath>

 <web>
  <link target="/"><!-- если эту папку zip-ануть, получится .war -->
   <dir name="C:/j/voip.dev/bh/target/voip" />
  </link>
 </web>
 
</application>

Готово!

Далее просто запускаем Tomcat не обычной зеленой стрелочкой, а стрелочкой с "jr".
Вносим изменения в код, компилируем (IDEA перед этим сохраняет) Ctrl+Shift-F9 или Ctrl-F9, F5 в браузере и видим обновление.

PS: если хочется ускорить первый старт Tomcat, то мой предыдущий совет "скопировать папку VAADIN из vaadin.jar в [webroot]" по прежнему применим.


Кроме того, возможно вам захочется избавиться от сериализации HTTP сессии между рестартами Tomcat (пользы от этой сериализации в случае Vaadin не очень много), для этого в [webroot]/META-INF нужно поместить файл context.xml вида:
<?xml version='1.0' encoding='utf-8'?>
<Context antiJARLocking="true" >
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
  <!-- disable session persistence across Tomcat restarts -->
  <Manager pathname="" />
</Context>

Аттрибут antiJARLocking="true" опционален (можно убрать). Он нужен если web приложение не освобождает какие-то классы и не выгружается Tomcat (свой код лучше от такого чистить, но бывают такие библиотеки третьих сторон).