IntelliJ и Tomcat.... измененные файлы автоматически не распознаются Tomcat

Я запускаю Intellij Ultimate с Tomcat и развертываю войну. Все разворачивается отлично в директорию webapp tomcat.

Когда я изменяю файл как файл xhtml, есть ли способ, чтобы tomcat автоматически забирал это изменение? На данный момент мне нужно скопировать файл из intellij и скопировать его в каталог, где он живет в каталоге tomcat webapp. Я знаю, что есть определенные файлы, которые будут нуждаться в перекомпиляции, но xhtml не являются одним из них.

Ответ 1

Это невозможно сделать, если вы развернете войну с IntelliJ IDEA. Однако это может произойти, если вы развернете взорванную войну. В ИДЕИ:

  1. откройте конфигурацию Tomcat Run/Debug (Run> Edit Configuration)
  2. Перейдите на вкладку "Развертывание"
  3. В разделе "Развертывание при запуске сервера" удалите (если имеется) артефакт my-webapp-name:war
  4. Нажмите значок добавления, выберите "Артефакт", а затем выберите my-webapp-name:war exploded
  5. Нажмите кнопку "ОК" (в диалоговом окне "Выбор артефактов для развертывания")
  6. По-прежнему в окне конфигурации запуска/отладки выберите вкладку "Сервер"
  7. В середине этой вкладки измените параметр "Деактивация по фрейму" на "Обновление ресурсов" или "Обновление классов и ресурсов".
    • Ресурсы обновления: все измененные ресурсы (то есть все компоненты приложения, кроме классов) будут обновлены.
    • Обновление классов и ресурсов: все измененные ресурсы будут обновлены; измененные классы будут перекомпилированы. Обратите внимание, что фактическое обновление классов будет зависеть от возможностей веб-сервера. Если я не забуду, Tomcat перезагрузит файлы html/xhtml и jsp, но не сервлеты или классы, которые используют JSP или сервлеты. Вам нужно изменить Tomcat, чтобы использовать для этого динамический загрузчик классов.
  8. Вы также можете установить действие "Вкл. Обновление" на выбранное выше.
    • Это определило, что произойдет, когда вы нажмете значок обновления Update icon (или Ctrl + F10) в окне "Выполнить".
    • "Показать диалог" определяет, будет ли IDEA запрашивать вас каждый раз, когда вы нажимаете значок обновления
  9. Нажмите ОК.

Теперь каждый раз, когда вы вносите изменения, IDEA повторно развертывает измененные файлы, когда кадр IDEA деактивируется (то есть теряет фокус). Это займет секунду или две, вы увидите это в нижней строке состояния в IDEA. Очевидно. вам все равно нужно обновить ваш веб-браузер, чтобы он выбирал новый файл (если, конечно, если на странице есть автоматическое обновление ajax, как fetch).

Хорошая комбинация с Tomcat - установить "Деактивация фрейма" на "Обновление ресурсов", а действие "Вкл. Обновление" на "Повторное развертывание" или "Перезапуск сервера". Это позволяет быстро обновлять статические страницы с помощью деактивации фрейма, и класс обновляется с помощью действия "обновление".

Компания под названием ZeroTurnaround продает JRebel, который является динамическим решением для загрузчика классов. У них также есть пять частей серии на эту тему, что очень хорошо.

Ответ 2

Позвольте мне описать последовательность действий с использованием скриншотов:

  • Откройте конфигурацию запуска/отладки Tomcat (Запустите > Изменить конфигурации)

введите описание изображения здесь

  1. Нажмите значок добавления, выберите "артефакт", а затем выберите pizza_mvc:war exploded: введите описание изображения здесь

  2. Измените "Об обновлении" и "Диафрагма включения кадра": введите описание изображения здесь

  3. Каждый раз, когда вы хотите обновить свои ресурсы, нажмите <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 - если у вас несколько открытых редакторов, вы увидите, что ваши грязные * редакторы будут не загрязнены, а изменения (классы) будут перезагружены)