Інтеграція tomcat та eclipse як середовища гарячого розгортання


88

Я хотів би встановити eclipse і tomcat в інтегрованому режимі, щоб зміни моїх JSP та сервлетів (якщо це можливо) відображались негайно, не вимагаючи розгортання.

Добре, це одне з тих питань, на яке є безліч відповідей в Інтернеті, але всі вони здаються різними. (використовуйте плагін Sysdeo, використовуйте плагін JBOss, робіть речі із застарілим Eclipse, використовуйте MyEclipse замість цього тощо), і я не зміг знайти 1 остаточний ресурс, на який можна посилатися. Отже, на мою користь, яка найпростіша і найбільш рекомендована процедура для цього?

Це передбачає, що у мене затемнення і tomcat працюють самостійно. Насправді мені вдалося інтегрувати їх не гарячим способом розгортання, використовуючи інструкції тут: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Версія Eclipse Версія: 3.4.2 (Ganymede) Tomcat v6.0.20


17
Через 4 роки мене бентежить той факт, що це все ще проблема. Давай, це досить принципово.
Конрад Гарус,

7 років потому (майже), я думаю , що я виявив рішення: stackoverflow.com/a/37064672/1034436
martian111

Відповіді:


75

Є два варіанти.

По-перше, Eclipse дозволяє вам це зробити, з невеликою зміною конфігурації (див. Також цей докладний пост )

  • додати Tomcat до списку серверів
  • зробити проект "Динамічний веб-проект" (або за допомогою майстра створення, або через розділ граней у налаштуваннях)
  • додати проект до tomcat та налаштувати його "збірку розгортання"
  • двічі клацніть tomcat зі списку, щоб відкрити конфігурації
  • Змініть "Публікація" на "Ніколи не публікувати автоматично" (це означає, що сервер не буде перезавантажений, коли ви натиснете ctrl + s)
  • запустити tomcat у режимі налагодження

Це все одно відображатиме зміни коду, але не перезапустить сервер.

По-друге, я давно використовую плагін FileSync :

  • налаштуйте плагін для надсилання всіх класів від директора bin до WEB-INF/classesвашої інсталяції tomcat (це майже те саме, що налаштування збірки розгортання)
  • налаштувати всі інші ресурси на перехід до відповідних місць
  • за бажанням, екстерналізувати всі абсолютні шляхи від налаштувань розташування filesync до однієї змінної та налаштувати цю змінну в eclipse (таким чином, ви також зможете зафіксувати параметри filesync, якщо всі учасники використовують eclipse)
  • додати Tomcat до списку Сервери в eclipse, налаштуйте параметр «Розташування серверів» на «Використовувати установку tomcat» (екран відкривається, коли ви двічі клацаєте tomcat зі списку серверів)
  • запустити tomcat у режимі налагодження

Для мене це ідеально працює. Кожна неструктурна зміна відображається негайно, без передислокації.

Оновлення:
Детальніше про методи гарячого розгортання ви можете прочитати тут .
Я також створив проект, який легко синхронізує робочу область із контейнером сервлетів.


@VladimirTsvetkov ні - це два окремі варіанти
Божо 02.03.12

Я пробую ваш перший підхід, але я використовую Maven Overlays, і коли я змінюю файл в одному з накладок, сервер все одно перезавантажується (накладання - це не динамічний веб-проект, а динамічний веб-модуль). Будь-які ідеї?
Гофман

2
У мене складається враження, що, змінивши "Публікація" на "Ніколи не публікувати автоматично", JSP більше не перезавантажуються / не перекомпілюються при зміні. Частина з перезавантаженням класу працює нормально, хоча запускаючи Tomcat у режимі налагодження.
yglodt

5
Я роблю це по-іншому: по-перше, змініть на автоматичну публікацію; по-друге, клацніть Modulesвкладку в конфігурації сервера, потім клацніть edit, зніміть прапорець auto deploy enabled, я думаю, це найпростіший спосіб. PS: Ваш перший спосіб для мене не працює.
проїзд

@hiway, де ця вкладка Модулі на вкладці конфігурації сервера?
Матеус Віккарі,

30

Просто нехай eclipse пише файли класів безпосередньо в каталог $ TOMCAT / webapps / MyWebApp / WEB_INF / classes. Потім налаштуйте apache-tomcat, щоб перевірити, чи оновлені файли класу, і перезавантажте їх, якщо вони є.

Щоб налаштувати tomcat на автоматичне перезавантаження класу при його зміні, вам потрібно

редагувати $TOMCAT/conf/context.xmlта встановити:

<Context reloadable="true"> 

Можливо, вам доведеться відредагувати та перезавантажити webapps/$YourWebApp/web.xmlфайл та включити:

<web-app reloadable="true">

Я не пам’ятаю, чи потрібні обидві зміни, але саме так я налаштував свій tomcat-6.0.18 на автоматичне перезавантаження.


Згідно з документацією, tomcat.apache.org/tomcat-6.0-doc/config/context.html вони не рекомендують розміщувати Contextелементи у файлі server.xml, але він повинен контролювати / WEB-INF / класи / та / WEB-INF / lib для будь-яких змін. Де ви читали про атрибут web-appелемента?
Майкл

Вибачте, трохи неправильно прочитайте свою відповідь. Контекст.xml "слід завантажувати для кожної веб-програми".
Майкл

2
Як ви налаштовуєте, куди Eclipse записує файли класів?
yglodt

7

Застереження : я просто щасливий клієнт, я не працюю на Zero Turnaround і я жодним чином не пов'язаний з ними.

Перевірте JRebel - він дозволяє кодувати без перезапуску веб-програми. В основному це працює, інструментуючи ваші класи та адаптуючи їх зміни. Він обробляє набагато більше випадків, ніж гаряче розгортання , включаючи:

  • Додавання / видалення методів
  • Додавання / видалення конструкторів
  • Зміна інтерфейсів
  • Додавання / видалення реалізованих інтерфейсів

Він комерційний ( деталі ціни , $ 550 / рік станом на червень 2018 року), і він має безліч плагінів для сторонніх платформ, включаючи:

  • Відгадай
  • Весна
  • Розпірки 2

Ви отримуєте безкоштовну пробну версію досить безболісно - я пропоную вам спробувати.


2
Jrebel, коли це працює, це працює. Коли цього не відбувається, це кошмар. Я б'юся головою з їхньою підтримкою вже більше тижня, і досі не можу змусити його працювати в моїй простій настройці весняного mvc. Вони не допоможуть далі, якщо я не надішлю їм свій додаток або світ світу мого додатка. І, ваші ціни застарілі - тепер вони заряджають бомбу. Слава Богу, я використав лише їх пробну версію
happybuddha

Поточна ціна - 365 доларів на рік / місце
Джозеф Луст,

А тепер його 550 доларів на рік / місце
фріпер

3

Змініть робочу область в Eclipse на \ tomcat \ webapps. Оскільки це лише для вашої роботи, це має працювати нормально. Які б зміни ви не вносили в Eclipse, вони знаходяться в тому самому каталозі, який tomcat шукає для розгортання додатків


3

У поданні серверів створіть новий сервер, ще не додайте до нього жодного ресурсу (проекту). Двічі клацніть на сервері в місці розташування серверів. Виберіть "Використовувати інсталяцію tomcat". Змініть "Шлях розгортання" до каталогу розгортання tomcat (Наприклад: c: \ server \ Tomcat 7.0.14 \ webapps). Розгорніть розділ «Видавнича справа». Поставте прапорець біля пункту "Автоматично публікувати після події збірки". Збережіть і закрийте. У меню затемнення встановіть прапорець "Проект -> Автоматично будувати". У вікні серверів клацніть правою кнопкою миші на своєму сервері, "Додати та видалити", опублікуйте свій проект.


2

Чому б не використовувати інтегрований сервер tomcat із із в eclipse, якщо це лише для розробки? Ви можете налаштувати сервери під вікном-> налаштування. Після його налаштування, якщо у вас є jsp, який називається page.jsp, ви можете клацнути правою кнопкою миші та вибрати запуск на сервері. У налаштуваннях-> загальне-> Веб-браузер ви можете вибрати погоду для використання вбудованого або зовнішнього браузера. Внесіть деякі зміни у свій jsp, збережіть та оновіть свою сторінку з браузера. Зміни будуть автоматично відображені після збереження та оновлення браузера.


2

Для мене тут працює:

context.xml ось так:

<Context path="/myapp" docBase="myapp" debug="5"
    reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
    <Loader     loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" />

</Context>

Потім, на вкладці Сервери в Eclipse, на вкладці "Модулі" я вимкнув "Автоперезавантаження" для всіх модулів, що розгортаються.

Також дозвольте конфігурації за замовчуванням дозволити автоматичну публікацію.

Використовуючи Maven із WTP, не забудьте залишити вміст src / main / resources, оскільки Eclipse наполягає на виключенні вмісту цієї папки остаточної збірки.

Тільки з усім цим я отримав повні (VM) класи гарячого розгортання з ресурсами гарячого розгортання !!!


1

У своєму середовищі розробки просто вкажіть сервер Tomcat на пошук JSP в будь-якому каталозі, в якому ви їх розробляєте. Як тільки ви збережете файл, ви зможете побачити зміни тоді.


1

Мені вдалося змусити це працювати над своїм середовищем розробки за допомогою агента Spring Loaded JVM. Поки я розробляю веб-додатки Spring, в описі цього проекту згадується, що він є

можна використовувати на будь-якому байт-коді, який може працювати на JVM

Використовуючи наступні налаштування, я зміг автоматично опублікувати зміни у підключеному екземплярі Tomcat (звичайний метод WTP Eclipse). Я використовую Spring Tool Suite 3.7.3 на базі Eclipse Mars.2 (4.5.2).

  1. Завантажте останній випуск JAR Spring Loaded з їх проекту Github . Це перевірено за допомогою springloaded-1.2.5.RELEASE.jar.
  2. Налаштуйте сервер Tomcat в Eclipse як зазвичай (протестовано з Tomcat 8.0.30)
  3. Відкрийте сторінку конфігурації сервера Tomcat в Eclipse (двічі клацніть на екземплярі сервера на вкладці "Сервери").
  4. У розділі "Параметри сервера" зніміть прапорець біля пункту "Автоматичне перезавантаження модулів за замовчуванням".
    • Примітка: Якщо веб-модулі вже додані на сервер, можливо, вам доведеться вимкнути "Автоматичне перезавантаження" на них окремо через вкладку "Модулі" (внизу вікна сторінки конфігурації).
  5. У розділі "Загальна інформація" натисніть "Відкрити конфігурацію запуску"
    • На вкладці "Аргументи" додайте в кінець "Аргументи ВМ" таке: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Щоб дозволити перегляд JAR- .classфайлів на додаток до файлів проекту , налаштуйте -Dspringloaded=watchJars=аргумент VM відповідно до коментарів до цієї проблеми .

Запустіть сервер і публікуйте на ньому проекти Dynamic Web Application, як зазвичай. Знову ж таки, я зміг перевірити це за допомогою веб-додатків Spring. Наприклад, модифікація коду, додавання / віднімання методів тощо в класах @Controller були застосовані майже миттєво після того, як я збережу файл і Eclipse будує та публікує змінений клас. Нарешті, у розділі поширених запитань проекту Spring Loaded згадувалося кілька випадків, коли речі не перезавантажуються, тому для цього потрібно буде перезапустити сервер / програму. Але ці винятки набагато рідше.

Ще одне зауваження: це НЕ працює із вбудованим Pivotal tc Server або VMware vFabric tc Server, який постачається зі STS. Для цих серверів існує параметр «Увімкнути перезавантаження на основі агента Java (експериментальний)», але в ньому використовується старіший випуск 1.2.0 Spring Loaded, який у мене не працював.


Здається, ви повинні взяти Spring, як щодо Non Springзаявки.
Tangoo

Хоча вам потрібно налаштувати JAR SpringLoaded для Tomcat, самі запущені програми НЕ повинні бути програмами Spring (а також не включати будь-які JAR Spring). Я успішно перевірив це за допомогою простого, єдиного сервлету HelloWorld.
martian111

0

Ви готові використовувати Jetty для цілей розробки?

Якщо так, це досить просто використовувати з Maven - просто запустіть mvn jetty:run


0

Це може бути не найкращим способом, але для мене це працює.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc (слід експортувати jar до каталогу lib в $ contextPath)
  • $ eclipseWorkbench / project-jsp /

Я використовую команду rsync для синхронізації змін від мого проекту jsp до $ contextPath.

Використовуйте віддалену налагодження в Eclipse для Tomcat, що дозволить обмежувати гарячу заміну коду. Якщо ви змінюєте статичні поля або додаєте методи, вам потрібно буде експортувати jar і перезапустити контекст.


0

ми можемо скористатися наведеним нижче варіантом? Двічі клацніть на Сервер у затемненні -> Розташування серверів -> Використовувати інсталяцію tomcat. Він бере під контроль встановлення tomcat. Вам не потрібно перезапускати сервер для змін у класах Java.


0

Я знайшов найпростіший спосіб: використання символічних посилань: Я думаю, що це найшвидший спосіб, оскільки взагалі немає синхронізації: каталог tomcat і каталог вашого проекту будуть весь час одним і тим же каталогом.

Tomcat періодично виявлятиме зміни та передислокує вашу програму.

Існує також спосіб налагодження вашої програми, тому я покірно вважаю це хорошим рішенням.

Я задокументував своє рішення тут для всіх, хто цікавиться.


Чи можу я знати, чому існує необхідність використовувати віддалений додаток Java, оскільки він використовує localhost, це означає, що я налагоджую за допомогою власної локальної машини
Karen Goh

0

Якщо ви поспішаєте:

  1. встановіть прапорець "ніколи не публікувати автоматично" в tomcat (інший контейнер) у eclipse.
  2. запустити tomcat (інший контейнер) у режимі налагодження.

вуаля! :)


0

У Eclipse натисніть на проект у верхньому меню та переконайтеся, що вибрано “Автоматично будувати”. Це вирішило мою проблему. Я запускав Eclipse разом з Tomcat, використовуючи метадані моєї робочої області. Я також керував Maven у проекті Dynamic Web Module. Щоб перевірити, додайте свою програму до Tomcat. Запустіть Tomcat з Eclipse. Переконайтеся, що ваша програма розгорнута та запущена. Відкрийте вкладку Консоль в Eclipse. Внесіть зміни у свою заявку. Через пару секунд ви побачите, як ваші зміни автоматично збираються та розгортаються в Tomcat.


-2

Найпростіший, найшвидший: встановіть Eclipse для створення WAR-файлу під час побудови; як крок після збірки скопіюйте цей файл WAR у свою директорію tomcat webapps. Tomcat розпізнає зміни та оновить сайт без необхідності розгортання. Зверніть увагу, що це не ідеально; користувачі, які використовують цей веб-додаток, можуть мати менш ніж оптимальний досвід роботи, оскільки Tomcat перезапускає веб-додаток "під" ними; але це відповідає вашому запиту.


1
гаразд ... я думаю, я не дав зрозуміти своїх намірів. Я дійсно не зацікавлений у розгортанні програми для деяких користувачів, але я намагаюся запустити tomcat з eclipse для своїх повсякденних потреб у розробці та скоротити цикл зворотного зв’язку (внести зміни) -> (див. Результат) замість (Зробити Змінити) -> Розгорнути -> (Див. Результат)
видалити
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.