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


Я запускаю Intellij Ultimate с Tomcat и развертываю войну. Все развертывает штрафа в каталог веб-приложения из каталога.

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

4 113

4 ответа:

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

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

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

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

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

опишу последовательность действий с помощью скриншотов:

  1. откройте конфигурацию Tomcat Run/Debug (Run > Edit Configuration)

enter image description here

  1. нажмите на иконку "Добавить", выберите "артефакт", а затем выберите pizza_mvc:war exploded: enter image description here

  2. изменить 'ON update action' и 'On frame diactivation': enter image description here

  3. каждый раз если вы хотите обновить свои ресурсы, нажмите <Ctrl> + F10

Если вы хотите обновить классы и ресурсы, выполните команду котяра на отладки режим. В этом режиме IntelliJ обновление классов и ресурсов без проблем (горячая замена).

получил ту же проблему. IntelliJ не обновлял мой проект, потому что я запускаю как "режим запуска". Когда я бегу в отладки режим и нажать <kbd>Ctrl</kbd>+<kbd>F10</kbd>, он обновляет классы и ресурсы.

Я нашел лучший способ.

на затмение мы автоматически строим, компилируем + перезагружаем статические файлы. На самом деле статические файлы подаются непосредственно из src / main / webapp.

на IntelliJ вместо того чтобы служить непосредственно из src / main / webapp, есть папка, созданная в target, в которой у вас будет копия вашего src / main / webapp а также другой контекст, связанный .. web-inf / классы /библиотека.

Если вы ставите вместо цели выход взорванного артефакта в src / main / webapp, он не будет перезаписывать исходные файлы, и он будет служить непосредственно, вы не придется бить -обновить ресурсы / обновить ресурсы и классы

Так что вам нужно сделать в IntelliJ это

  1. изменить выходной каталог разнесенного артефакта в src / main / webapp enter image description here
  2. сделать макрос для сохранения и перекомпиляции / компиляции грязных классов (cmd + shift+f9) enter image description here enter image description here
  3. редактирование реестра и настроек для автоматической сборки и сборки во время работы приложения(cmd+shift+A - registry). enter image description here enter image description here

после этого, если у вас есть задания, которые изменяют статические файлы извне IntelliJ,вы сразу увидите изменения, не заходя в IntelliJ и обновление Ресурсы, и для классов у вас есть этот макрос, который сохраняет и компилирует (Примечание: Вы также можете просто нажать Compile/Recompile : cmd + shift + F9 / cmd + F9 - если у вас есть несколько открытых редакторов, вы увидите, что ваши грязные * редакторы будут не грязными, а изменения(классы) будут перезагружены)