IntelliJ и Tomcat.... измененные файлы автоматически не распознаются Tomcat
Я запускаю Intellij Ultimate с Tomcat и развертываю войну. Все разворачивается отлично в директорию webapp tomcat.
Когда я изменяю файл как файл xhtml, есть ли способ, чтобы tomcat автоматически забирал это изменение? На данный момент мне нужно скопировать файл из intellij и скопировать его в каталог, где он живет в каталоге tomcat webapp. Я знаю, что есть определенные файлы, которые будут нуждаться в перекомпиляции, но xhtml не являются одним из них.
Ответы
Ответ 1
Это невозможно сделать, если вы развернете войну с IntelliJ IDEA. Однако это может произойти, если вы развернете взорванную войну. В ИДЕИ:
- откройте конфигурацию Tomcat Run/Debug (Run> Edit Configuration)
- Перейдите на вкладку "Развертывание"
- В разделе "Развертывание при запуске сервера" удалите (если имеется) артефакт
my-webapp-name:war
- Нажмите значок добавления, выберите "Артефакт", а затем выберите
my-webapp-name:war exploded
- Нажмите кнопку "ОК" (в диалоговом окне "Выбор артефактов для развертывания")
- По-прежнему в окне конфигурации запуска/отладки выберите вкладку "Сервер"
- В середине этой вкладки измените параметр "Деактивация по фрейму" на "Обновление ресурсов" или "Обновление классов и ресурсов".
- Ресурсы обновления: все измененные ресурсы (то есть все компоненты приложения, кроме классов) будут обновлены.
- Обновление классов и ресурсов: все измененные ресурсы будут обновлены; измененные классы будут перекомпилированы. Обратите внимание, что фактическое обновление классов будет зависеть от возможностей веб-сервера. Если я не забуду, Tomcat перезагрузит файлы html/xhtml и jsp, но не сервлеты или классы, которые используют JSP или сервлеты. Вам нужно изменить Tomcat, чтобы использовать для этого динамический загрузчик классов.
- Вы также можете установить действие "Вкл. Обновление" на выбранное выше.
- Это определило, что произойдет, когда вы нажмете значок обновления
(или Ctrl + F10) в окне "Выполнить". - "Показать диалог" определяет, будет ли IDEA запрашивать вас каждый раз, когда вы нажимаете значок обновления
- Нажмите ОК.
Теперь каждый раз, когда вы вносите изменения, IDEA повторно развертывает измененные файлы, когда кадр IDEA деактивируется (то есть теряет фокус). Это займет секунду или две, вы увидите это в нижней строке состояния в IDEA. Очевидно. вам все равно нужно обновить ваш веб-браузер, чтобы он выбирал новый файл (если, конечно, если на странице есть автоматическое обновление ajax, как fetch).
Хорошая комбинация с Tomcat - установить "Деактивация фрейма" на "Обновление ресурсов", а действие "Вкл. Обновление" на "Повторное развертывание" или "Перезапуск сервера". Это позволяет быстро обновлять статические страницы с помощью деактивации фрейма, и класс обновляется с помощью действия "обновление".
Компания под названием ZeroTurnaround продает JRebel, который является динамическим решением для загрузчика классов. У них также есть пять частей серии на эту тему, что очень хорошо.
Ответ 2
Позвольте мне описать последовательность действий с использованием скриншотов:
- Откройте конфигурацию запуска/отладки Tomcat (Запустите > Изменить конфигурации)
![введите описание изображения здесь]()
-
Нажмите значок добавления, выберите "артефакт", а затем выберите pizza_mvc:war exploded
:
![введите описание изображения здесь]()
-
Измените "Об обновлении" и "Диафрагма включения кадра":
![введите описание изображения здесь]()
-
Каждый раз, когда вы хотите обновить свои ресурсы, нажмите <Ctrl> + F10
Ответ 3
Если вы хотите обновить классы и ресурсы, запустите Tomcat в режиме отладки. В этом режиме IntelliJ обновляет классы и ресурсы без проблем (горячая замена).
У меня такая же проблема. IntelliJ не обновил мой проект, потому что я запускаю как "Режим запуска". Когда я запускаю в режиме отладки и <kbd>Ctrl</kbd>+<kbd>F10</kbd>
, он обновляет классы и ресурсы.
Ответ 4
Я нашел лучший способ.
В Eclipse мы автоматически создаем, компилируем + перезагружать статические файлы. Фактически статические файлы обслуживаются непосредственно из src/main/webapp.
В IntelliJ вместо использования непосредственно из src/main/webapp создается папка, созданная в цель, в которой у вас будет копия вашего src/main/webapp, а также другие связанные с этим.. web-inf/classes/lib.
Если вы поставили вместо цели выход взорванного артефакта на src/main/webapp, он не перезапишет исходные файлы, и он будет работать напрямую, вы не будете должны ударить - ресурсы обновления/ресурсы и классы обновлений
Итак, что вам нужно сделать в IntelliJ,
- изменить каталог выходных файлов артефакта в src/main/webapp
![введите описание изображения здесь]()
- сделать макрос для сохранения и перекомпиляции/компиляции грязных классов (cmd + shift + f9)
![введите описание изображения здесь]()
- изменить реестр и настройки для автоматического создания и сборки во время работы приложения (cmd + shift + a - registry).
![введите описание изображения здесь]()
После этого, если у вас есть задания, которые изменяют статические файлы извне IntelliJ, , вы сразу увидите изменения, не перейдя в IntelliJ и Update Resources, а для классов у вас есть этот макрос, который сохраняет, и compile (Примечание: вы также можете просто нажать Compile/Recompile: cmd + shift + F9/cmd + F9 - если у вас несколько открытых редакторов, вы увидите, что ваши грязные * редакторы будут не загрязнены, а изменения (классы) будут перезагружены)