Emaster blog

View on GitHub

Настраиваем JRebel для удаленного приложения

Столкнулся с проблемой, что JRebel не работает с remote standalone application, т.е. без сервера приложений. Дальше были курения, как это работает и что можно сделать. Спасибо (@shelajev), собственно он и предложил мне написать об этом.

Дальше будет пример, как я настроил JRebel в связке с Dropbox под свое приложение.

Настройка проекта

Сначала необходимо добавить в ресурсы своего проекта конфиг rebel.xml с указанием пути, где необходимо брать новые классы. Мой выглядит вот так:

<?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="/home/emaster/Dropbox/jrebel_sync/main">
        </dir>
    </classpath>
</application>

Думаю Dropbox на вашем компьютере уже установлен или вы можете это сделать без меня :) Дальше нам нужно, чтобы Dropbox следил за файлами, получаемыми после компиляции проекта. Есть два варианта, либо изменить путь для скомпилированных классов в вашем проекте, либо сделать символьную ссылку. Мне второй вариант больше нравится, сейчас это можно в любой системе сделать (вариант для Linux, Mac):

mkdir ~/Dropbox/jrebel_sync
cd ~/Dropbox/jrebel_sync
ln -s /home/emaster/dev/MyProject/target/classes/main

Таким образом в ~/Dropbox/jrebel_sync/main будут все скомпилированные классы.

Настройка сервера

Далее на сервер скачиваем свежий JRebel, распаковываем куда-нибудь. Добавляем параметры для запуска приложения:

-javaagent:/home/emaster/jrebel/jrebel.jar
-Drebel.log=true

Теперь установим на сервере Dropbox и не забудьте его привязать к своему аккаунту. После установки в домашней директории появится Dropbox с правами только для текущего пользователя, нужно открыть доступ на чтение для всех. Выполним команду:

chmod 755 /home/emaster/Dropbox

Testing

Осталось пересобрать наш проект и убедиться, что в логах при старте приложения есть строка:

JRebel: Directory '/home/emaster/Dropbox/jrebel_sync/main' will be monitored for changes.

Если она присутствует, значит при любой компиляции файла Dropbox обновит его на сервера, а JRebel в свою очередь подхватит новый

Возможные проблемы

При новом билде приложения JRebel может подхватить (пока не разобрался почему) старые файлы из Dropbox. Как временный вариант можно чистить директорию target после каждого редеплоя.

comments powered by Disqus