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. Однак це може бути, якщо розгорнути вибухнуту війну . В IDEA:

  1. відкрийте конфігурацію запуску / налагодження Tomcat ( Виконати> Змінити конфігурації )
  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, як отримати).

Хорошим поєднанням з Tomcat є встановлення параметра "Увімкнення кадру" на "Оновити ресурси" та "Увімкнути" оновлення на "Redeploy" або "Перезапустити сервер". Це дозволяє статичним сторінкам швидко оновлюватись шляхом деактивації кадру, і клас оновлено за допомогою дії "оновлення".

Компанія під назвою ZeroTurnaround продає JRebel, який є динамічним рішенням завантажувача класів. Вони також мають п’ять частин серії на цю тему, що дуже добре.


У мене помилка: 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} в якості кореневого каталогу webapp. Ви можете перевірити довідник щодо будь-якої конкретної інформації JBOss.
Javaru

3
На кроці 7 ви не будете (принаймні в Intellij 14) отримувати відповідні варіанти випаду, якщо у вас всі артефакти завантажені як "вибухнули".
mortensi

1
@ChajaTwoPencils - Крок 5 натискає кнопку "OK" у діалоговому вікні "Вибрати артефакти для розгортання" (для якого немає "застосувати"), а не вікно налаштування / відлагодження. Я додав уточнюючу заяву до кроку 5.
Javaru

12

Якщо ви хочете оновити класи та ресурси, запустіть Tomcat в режимі налагодження . У цьому режимі IntelliJ без проблем оновлює класи та ресурси (гаряча заміна).

Маю таку ж проблему. IntelliJ не оновлював мій проект, тому що я працюю як "Запуск режиму". Коли я запускаю в режимі налагодження і натискаю Ctrl+ F10, він оновлює класи та ресурси.


Control-F10 вирішив проблему для мене. Дякую!
Джефрі Гетзін

3

Я знайшов кращий спосіб.

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

В IntelliJ замість обслуговування безпосередньо з src / main / webapp є папка, створена в цільовій формі, в якій ви будете мати копію вашого src / main / webapp, а також інших пов'язаних з контекстом .. web-inf / class / lib.

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

Отже, що вам потрібно зробити в IntelliJ, це

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

Після цього, якщо у вас є завдання, які змінюють статичні файли з-за меж IntelliJ, ви побачите зміни негайно, не переходячи до IntelliJ та оновлення ресурсів , а для класів у вас є той макрос, який зберігає та компілює (Примітка: Ви також можете просто натиснути "Компілювати" / Перекомпілювати: cmd + shift + F9 / cmd + F9 - якщо у вас є кілька відкритих редакторів, ви побачите, що ваші брудні * редактори будуть не брудними, а зміни (класи) будуть перезавантажені)


Здається, якщо у вас увімкнено компілятор реєстру.automake .., він підштовхує ваші зміни, натиснувши і зберегти.
Radu Toader

0

Це можливо лише при розгортанні папки, що підірвалася, увімкнено гаряче перезавантаження та запуск tomcat в режимі налагодження.

Це кроки для досягнення цього.

  1. відкрийте конфігурацію запуску / налагодження Tomcat (Виконати> Змінити конфігурації)
  2. Перейдіть на вкладку "Розгортання" 3. У розділі "Розгортання при запуску сервера" видаліть (якщо є) артефакт my-webapp-name: war
  3. Клацніть піктограму "Додати", виберіть "артефакт", а потім оберіть my-webapp-name: війна вибухнула
  4. Натисніть кнопку ОК (у діалоговому вікні "Вибрати артефакти для розгортання")
  5. Ще у вікні конфігурації запуску / налагодження виберіть вкладку «Сервер»
  6. Змініть налаштування "Увімкнення кадру" та "Увімкнути дію оновлення" на "Оновити класи та ресурси"
  7. Застосуйте та збережіть
  8. Перейдіть до звичайних налаштувань проектів, натиснувши "Файл", потім "Налаштування" або "Натискання" CTRL + ALT + S
  9. goto "Створення, виконання, розгортання"
  10. Компілятор
  11. Виберіть Створити проект автоматично
  12. зберегти
  13. Запустіть tomcat в режимі налагодження

0

якщо у вас є багаточастинні файли, які ви хочете переглянути / відтворити відразу, завантажте їх безпосередньо в цільову папку. * (змінити лише місце запису в цільову папку / статичну /)

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

Ви зможете негайно переглянути файл без необхідності перезапускати IDE

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.