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

135

Я использую Intellij Ultimate с Tomcat и разверну войну. Все нормально разворачивается в каталог веб-приложений tomcat.

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

Питер
источник

Ответы:

21

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

  1. Откройте конфигурацию Tomcat Run / Debug (Выполнить> Изменить конфигурации)

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

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

  2. Измените «При обновлении» и «По кадрированию»: введите описание изображения здесь

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

Лорд найтон
источник
Спасибо за напоминание мне , чтобы проверить «О действии„Обновить“»
KM1
290

Это невозможно сделать, если вы развернете войну с 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. Вы также можете установить « Вкл» обновление » на выбранное выше.
    • Это определило, что произойдет, когда вы нажмете Значок обновлениязначок обновления (или Ctrl+F10 ) в окне «Выполнить».
    • «Показать диалог» определяет, будет ли IDEA запрашивать вас каждый раз, когда вы нажимаете значок обновления
  9. Нажмите ОК.

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

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

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

Javaru
источник
У меня ошибка: Error: Artifact 'my-webapp-name:war exploded' has invalid extensionкак исправить?
Антон Дозорцев
3
Я также настоятельно рекомендую использовать DCEVM для автоматической перезагрузки классов. Затем вы можете использовать «Обновление классов и ресурсов», чтобы применить любые изменения к исходному коду без повторного развертывания приложения. Смотрите: blog.jetbrains.com/idea/2013/07/… . В дополнение к тому, что объясняется в этом руководстве, необходимо установить JAVA_HOME на вкладке «Настройка / Отладка - Отладка» конфигурации запуска Tomcat, чтобы указать на JRE DCEVM.
Алекс Федулов,
1
@yaroslavprokipchyn - я не знаком с JBoss и любыми «специальными» требованиями, которые могут у него возникнуть. Но насколько я знаю, это должно работать так же. Для tomcat IDEA создает конфигурацию Tomcat (context.xml), которая указывает Tomcat использовать каталог target / {contextName} в качестве корневого каталога веб-приложения. Вы можете проверить справочное руководство для любой конкретной информации JBOss.
Джавару
3
На шаге 7 вы не получите (по крайней мере, в Intellij 14) соответствующие выпадающие списки, если все ваши артефакты не загружены как «взорванные».
Мортензи
1
@ChiefTwoPencils - на шаге 5 нажмите кнопку «ОК» в диалоговом окне «Выбор артефактов для развертывания» (для которого нет «применить»), а не в окне конфигурации «Выполнить / отладить». Я добавил
поясняющее
12

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

У меня такая же проблема. IntelliJ не обновил мой проект, потому что я запускаю как «Режим запуска». Когда я запускаю в режиме отладки и нажимаю Ctrl+ F10, он обновляет классы и ресурсы.

Лукаш Возняк
источник
Control-F10 исправил проблему для меня. Спасибо!
Джеффри Гетзин
3

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

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

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

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

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

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

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

Раду Тоадер
источник
Похоже, что если у вас включен реестр compiler.automake .., ваши изменения будут отправлены только нажатием кнопки save.
Раду Тоадер
0

Это возможно только при развертывании развернутой папки war, включенной горячей перезагрузке и запуске tomcat в режиме отладки.

Это шаги для достижения этого.

  1. откройте конфигурацию Tomcat Run / Debug (Run> Edit Configuration)
  2. Перейдите на вкладку «Развертывание». 3.В разделе «Развертывание при запуске сервера» удалите (если имеется) артефакт my-webapp-name: war
  3. Нажмите значок добавления, выберите «Артефакт», а затем выберите my-webapp-name: war exploded
  4. Нажмите кнопку ОК (в диалоговом окне «Выбор артефактов для развертывания»)
  5. По-прежнему в окне конфигурации запуска / отладки выберите вкладку «Сервер»
  6. Измените настройки «Отключение по кадру» и «При обновлении» на «Обновление классов и ресурсов».
  7. Применить и сохранить
  8. Перейдите к настройкам обычных проектов, нажав «Файл», затем «Настройки» ИЛИ нажав CTRL + ALT + S.
  9. Перейти к "Сборка, выполнение, развертывание"
  10. составитель
  11. Выберите Build project автоматически
  12. спасти
  13. Запустите Tomcat в режиме отладки
Адинду Стивенс
источник
0

если у вас есть мультифайлы, которые вы хотите просмотреть / воспроизвести сразу, загрузите их прямо в целевую папку. * (только изменить место записи в целевую папку / static /)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

вы сможете сразу же просмотреть файл, не перезапуская IDE

Эстер
источник