Інтеграція 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.