Как выполнить горячую замену Java-классов на Tomcat вне IDE с помощью dcevm+hotswapagent

Я пытаюсь настроить горячую замену Java-класса на Tomcat, который находится на моей машине, но не настроен в моей IDE (Eclipse). Во всех примерах я могу обнаружить, что сервер Tomcat запускается из Eclipse. Возможно ли иметь горячую замену кода с помощью DCEVM+HotSwapAgent на внешнем коте? Вот что я сделал до сих пор:

  1. Настройте DCEVM в качестве altjvm для jdk1.8.0_112 с помощьюDCEVM-light-8u112-installer.jar
  2. Обновлен запуск Tomcat, чтобы включить это: set JAVA_OPTS=-XXaltjvm=dcevm -javaagent:<path-to>hotswap-agent-1.0.jar %JAVA_OPTS%
  3. Развернуло мое приложение war который включает в себя hotswap-agent.properties в WEB-INF/classes

В моем hotswap-agent.properties файл, я установил extraClasspath собственность на мой проект bin папка в моем рабочем пространстве затмения. Я также установил autoHotswap=true (Я хотел бы иметь горячую замену кода независимо от того, подключен ли отладчик).

При такой настройке я не могу заставить Tomcat реагировать на изменения, когда я строю затмение (оно настроено на автоматическое построение). Я что-то упустил, чтобы заставить это работать?

Примечание: я сделал по сути то же самое, что и выше с JRebel, поэтому я знаю, что это по крайней мере возможно. Я просто пытаюсь понять, смогу ли я заставить это работать со всеми инструментами с открытым исходным кодом. Заранее спасибо!

2 ответа

Это возможно. Пожалуйста, проверьте, что у вас есть extraClasspath установить правильно - скомпилировать файл (проверить, что новая версия.class файла создана на extraClasspath) и перезапустить tomcat без развертывания новой WAR. Если изменение не применяется, то extraClasspath установлен неправильно.

Уровень DEBUG также должен содержать более подробную информацию об источниках данных - должна быть строка, аналогичная Registering resource listener on classpath URI {}

Пожалуйста, загрузите текущую версию HA.

Вы можете создать файл для своего контекста в папке conf/Catalina/localhost и заставить Tomcat перезагружать ваши классы по мере их изменения с помощью Eclipse Build автоматически.

Для Tomcat 8.5 файл your_project.xml будет выглядеть следующим образом, для других версий Tomcat проверьте документацию, поскольку она может немного отличаться.

<Context docBase="/eclipse-workspace/your_project/src/main/webapp">
<Resources>
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_project/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_other_project/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_external_libs" internalPath="/" webAppMount="/WEB-INF/lib" />
  </Resources>
</Context>
Другие вопросы по тегам