Интеграция tomcat и eclipse в качестве среды для быстрого развертывания

Я хотел бы настроить eclipse и tomcat таким образом, чтобы изменения в моих JSP и сервлетах (если возможно) отражались сразу же, не требуя развертывания.

Хорошо, это один из тех вопросов, который содержит множество ответов по всему Интернету, но все они кажутся разными. (используйте плагин Sysdeo, используйте плагин JBOss, делайте что-нибудь с устаревшим Eclipse, используйте MyEclipse и т.д.), и я не смог найти 1 окончательный ресурс для ссылки. Итак, для моей выгоды, какая самая простая и рекомендуемая процедура для установки?

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

Версия Eclipse Версия: 3.4.2 (Ганимед) Tomcat v6.0.20

Ответ 1

Есть два варианта.

Во-первых, Eclipse позволяет это сделать с небольшим изменением конфигурации (см. также этот подробный отчет)

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

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

Во-вторых, я долгое время использовал FileSync plugin:

  • настроить плагин для отправки всех классов из директории bin в WEB-INF/classes вашей установки tomcat (это почти то же самое, что и настройка сборки развертывания).
  • настроить все остальные ресурсы, чтобы перейти в их соответствующие местоположения.
  • необязательно, вытесняйте все абсолютные пути из параметров location filesync в одну переменную и настраивайте эту переменную в eclipse (таким образом, вы также сможете зафиксировать параметры filesync, если все члены используют eclipse).
  • добавьте Tomcat в список серверов в eclipse, настройте опцию "Расположение серверов" как "Использовать установку tomcat" (открывается экран, когда вы дважды щелкаете tomcat из списка серверов)
  • запустить tomcat в режиме отладки

Он отлично работает для меня именно так. Каждое неструктурное изменение немедленно отражается без повторного развертывания.

Update:
Подробнее о методах для горячего развертывания здесь можно узнать здесь. Я также создал проект, который легко синхронизирует рабочее пространство с контейнером сервлета.

Ответ 2

Просто дайте 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">

Я не могу вспомнить, нужны ли оба изменения, но то, как я настроил my tomcat-6.0.18 для автоматической перезагрузки.

Ответ 3

Отказ от ответственности: я просто счастливый клиент, я не работаю для Zero Turnaround, и я никоим образом не связан с ними.

Проверьте JRebel - он позволяет вам кодировать без перезапуска веб-приложений. Он в основном работает, применяя ваши классы и адаптируя их изменения. Он обрабатывает гораздо больше случаев, чем горячее развертывание, в том числе:

  • Добавление/удаление методов
  • Добавление/удаление конструкторов
  • Изменение интерфейсов
  • Добавление/удаление реализованных интерфейсов

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

  • Guice
  • весна
  • Struts 2

Вы бесплатно получаете бесплатную пробную версию - я предлагаю вам сделать это.

Ответ 4

Измените рабочее пространство в Eclipse на \tomcat\webapps Поскольку это просто для вашей работы, это должно работать нормально. Независимо от изменений, внесенных вами в Eclipse, в том же каталоге tomcat ищет приложения для развертывания

Ответ 5

В представлении серверов создайте новый сервер, еще не добавляйте ресурс (проект) на сервер. Дважды щелкните по серверу на сервере. Выберите "Использовать установку tomcat". Измените "Развернуть путь" в каталог развертывания tomcat (пример: c:\server\Tomcat 7.0.14\webapps). Расширьте раздел "Публикация". Установите флажок "Автоматически публиковать после события сборки". Сохрани и закрой. В меню затмения отметьте "Проект → Создать автоматически". На экране серверов щелкните правой кнопкой мыши на своем сервере, "Добавить и удалить", опубликуйте проект.

Ответ 6

Почему бы не использовать интегрированный сервер tomcat с помощью в eclipse, если это только для разработки? Вы можете настроить серверы в окне → предпочтения. После того, как он настроен, если у вас есть jsp, называемый page.jsp, вы можете щелкнуть его правой кнопкой мыши и выбрать выполнить на сервере. В настройках → general- > Web browser вы можете выбрать погоду для использования встроенного браузера или внешнего. Внесите некоторые изменения в свой jsp, сохраните и обновите страницу в браузере. Изменения будут автоматически отображены после сохранения и обновления вашего браузера.

Ответ 7

Что для меня здесь работает:

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 настаивает на том, чтобы исключить содержимое этой папки окончательной сборки.

Только со всем этим я получил полные (виртуальные) классы hot-deploy с ресурсами hot-deploy!!!

Ответ 8

В своей среде разработки просто укажите сервер Tomcat для поиска JSP в любом каталоге, в котором вы их разрабатываете. Как только вы сохраните файл, вы сможете увидеть изменения.

Ответ 9

Вы можете использовать Jetty для целей разработки?

Если это так, это довольно простое использование с Maven - просто запустите mvn jetty:run

Ответ 10

Это может быть не самый лучший способ, но он работает для меня.

  • $Tomcat/CONF/Каталина/локальный/.xml
  • $contextPath/WebApp/веб/WEB-INF/Lib/*. Баночка
  • $contextPath/webapp/web/
  • $eclispeWorkbench/проект-сервлет/SRC/
  • $eclispeWorkbench/project-servlet/servlet.jardesc(должен экспортировать jar в lib dir в $contextPath)
  • $eclipseWorkbench/проект-JSP/

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

Использовать удаленную отладку в Eclipse для Tomcat, которая позволит ограничить "горячую" замену кода. Если вы изменяете статические поля или добавляете методы, вам нужно будет экспортировать банку и перезапустить контекст.

Ответ 11

можно ли использовать параметр ниже? Дважды щелкните Сервер в eclipse → Расположение серверов → Используйте установку tomcat. Он контролирует установку tomcat. Вам не нужно перезапускать сервер для изменения классов Java.

Ответ 12

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

Tomcat будет периодически обнаруживать изменения и повторно развертывать ваше приложение.

Существует также способ отладки вашего приложения, поэтому я смиренно думаю, что это хорошее решение.

Я зарегистрировал свое решение здесь, для всех, кого это интересует.

Ответ 13

В случае, если вы спешите:

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

вуаля!:)

Ответ 14

Мне удалось получить эту работу в моей среде разработки с помощью агента Spring Loaded JVM. Хотя я разрабатываю веб-приложения Spring, в этом описании проекта упоминается, что это

можно использовать для любого байт-кода, который может работать на JVM

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

  • Загрузите последнюю версию JAR Spring Загрузите из своего проекта Github. Это было протестировано с помощью springloaded-1.2.5.RELEASE.jar.
  • Установите Tomcat Server в Eclipse как обычно (протестирован с Tomcat 8.0.30)
  • Откройте страницу конфигурации сервера Tomcat в Eclipse (дважды щелкните экземпляр сервера на вкладке "Серверы" ).
  • В разделе "Параметры сервера" снимите флажок "Автоматическая перезагрузка модулей по умолчанию".
    • Примечание. Если на сервере уже установлены веб-модули, вам может потребоваться отключить их самостоятельно через вкладку "Модули" (внизу окна страницы конфигурации).
  • В разделе "Общая информация" нажмите "Открыть конфигурацию запуска",
    • На вкладке "Аргументы" добавьте в конец "аргументы VM" следующее: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Чтобы включить просмотр JAR файлов в дополнение к файлам проекта .class, настройте аргумент -Dspringloaded=watchJars= VM за этот комментарий.

Запустите сервер и опубликуйте проекты динамического веб-приложения, как обычно. Опять же, я смог проверить это с помощью веб-приложений Spring. Например, модификация кода, методы добавления/вычитания и т.д. В классах @Controller были применены почти мгновенно после сохранения файла и создания Eclipse и публикации измененного класса. Наконец, раздел FAQ в проекте Spring Loaded упоминал несколько случаев, когда вещи не перезагружаются, поэтому для них потребуется перезагрузка сервера/приложения. Но эти исключения гораздо реже.

Еще одно примечание: это НЕ работает со встроенным Pivotal tc Server или VMware vFabric tc Server, который поставляется с STS. Для этих серверов есть опция "Включить Java-перезагрузку (экспериментальный)", но для нее используется более ранняя версия 2.0.0 Spring Loaded, которая не работает для меня.

Ответ 15

В Eclipse нажмите на Project в верхнем меню и убедитесь, что выбрано "Build Automatically". Это устранило мою проблему. Я запускал Eclipse с Tomcat, используя метаданные моего рабочего пространства. Я также запускал Maven в проекте Dynamic Web Module. Чтобы проверить, добавьте свое приложение в Tomcat. Запустите Tomcat из Eclipse. Убедитесь, что ваше приложение развернуто и запущено. Откройте вкладку "Консоль" в Eclipse. Внесите изменения в свое приложение. Через пару секунд вы увидите, что ваши изменения автоматически создаются и развертываются в Tomcat.

Ответ 16

Самый простой, быстрый: установите Eclipse для генерации WAR файла при его создании; как шаг после сборки, скопируйте этот WAR файл в каталог tomapat webapps. Tomcat распознает изменения и обновит сайт без необходимости развертывания. Обратите внимание, что это не идеально; пользователи, использующие этот webapp, могут иметь менее оптимальный опыт, поскольку Tomcat перезапускает webapp "под" их; но это соответствует вашему запросу.