Как выполнить горячую замену Java-классов на Tomcat вне IDE с помощью dcevm+hotswapagent
Я пытаюсь настроить горячую замену Java-класса на Tomcat, который находится на моей машине, но не настроен в моей IDE (Eclipse). Во всех примерах я могу обнаружить, что сервер Tomcat запускается из Eclipse. Возможно ли иметь горячую замену кода с помощью DCEVM+HotSwapAgent на внешнем коте? Вот что я сделал до сих пор:
- Настройте DCEVM в качестве altjvm для
jdk1.8.0_112
с помощьюDCEVM-light-8u112-installer.jar
- Обновлен запуск Tomcat, чтобы включить это:
set JAVA_OPTS=-XXaltjvm=dcevm -javaagent:<path-to>hotswap-agent-1.0.jar %JAVA_OPTS%
- Развернуло мое приложение
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>