2010-04-27 3 views
3

Я пишу веб-приложение с Maven в Eclipse IDE и использую контейнер сервлетов Tomcat.Ускорение Maven + Tomcat

Итак, я запускаю Maven следующим образом: mvn clean compile. Разумно, после этой операции я должен повторно запустить Tomcat, чтобы он мог повторно инициализировать контекст (многопользовательская программа Sysdeo Tomcat).

Проблема заключается в выполнении Maven и последующем повторном запуске Tomcat, которое требует заметного количества времени (например, 10 секунд для Maven и 20+ секунд для Tomcat, из-за регистрации, отображения O/R и т. Д.) Каждый раз, когда я сделай это.

Есть ли автоматическое и более быстрое решение для этих операций? Как я вижу, лучшим решением может быть перемещение повторно скомпилированных классов только в целевой каталог.

+0

Я только что основал плагин Maven под названием 'tomcat-maven-plugin' http://mojo.codehaus.org/tomcat-maven-plugin/context-goals.html Похоже, что он может легко вводить автоматизацию в проект в чтобы избежать ручного повторного запуска. – 0x2D9A3

+1

Уточните, чего вы пытаетесь достичь. Вы хотите использовать плагин sysdeo? Вы в порядке, глядя на Tomcat из Maven? Вы в порядке с альтернативой Tomcat (правила плагина Maven Jetty и Jetty быстрее Tomcat). –

+0

Я уже использую плагин Sysdeo. Но сначала я должен остановить Tomcat, затем запустить Maven, подождать, пока он не закончен, а затем снова запустить Tomcat. Таким образом, нормально работать с Tomcat от Maven, поэтому мне не нужно перезапускать его вручную. Причал не применим в моем случае. – 0x2D9A3

ответ

4

Есть ли автоматическое и более быстрое решение для этих операций? Как я вижу, лучшим решением может быть перемещение повторно скомпилированных классов только в целевой каталог.

Ну, вопрос в том, почему вы запускаете clean каждый раз? Выполнение инкрементной компиляции уже ускорило бы многое.

Update: Я согласен с @Carl о ​​Eclipse WTP, что обеспечивает очень хорошую поддержку Tomcat (я действительно не вижу добавленной стоимости плагин Sysdeo в настоящее время). Использование Eclipse WTP для разработки и запуска Maven до фиксации изменений для проверки того, что вы не нарушили непрерывную сборку, является очень типичным рабочим процессом. И как maven-eclipse-plugin, так и m2eclipse (две альтернативы интеграции Maven и Eclipse) поддерживают WTP, то есть ваш проект может быть признан как динамический проект , чем может быть Запуск на сервере.

+1

Хороший вопрос о 'clean', который, вероятно, отнимает много времени для повторной компиляции. –

+1

Согласен, использование 'clean' - это бездумная практика в этом случае. Спасибо. – 0x2D9A3

3

Maven выполняет две функции: управление зависимостями и управление строительством. Обычно я считаю, что управление зависимостями Maven - это большая неприятность, которая мне обычно не нужна, поэтому я занимаюсь управлением своими делами с помощью муравья.

По цене отредактированного вручную файла сборки ant дает вам очень хороший контроль над тем, куда файлы отправляются туда, где когда. Если вы скопируете вновь скомпилированные классы в свой каталог WEB-INF/classes и нажмите web.xml, чтобы вызвать перезагрузку, вам не нужно останавливать и перезапускать Tomcat. Это сокращает время компиляции/перезагрузки до одной секунды.

Вот как я предпочитаю работать. Некоторые поклонники Maven будут очень не согласны.


EDIT: Тем не менее, есть еще один метод, который позволяет мне полностью обходят вопрос сборки: Я развиваю в Eclipse, используя функциональные возможности WTP, который входит в состав редакции разработчика Java EE в. Когда я делаю изменение кода, я просто удаляю Ctrl-S, чтобы сохранить измененный файл, и Eclipse автоматически копирует только что скомпилированный класс в запущенный Tomcat, поэтому я могу сразу обновить свой браузер и увидеть вновь измененное веб-приложение. Благодаря инкрементной компиляции Eclipse этот метод, вероятно, является, вероятно, непревзойденным с точки зрения времени редактирования/запуска. Конечно, если вам действительно нужен Maven, это не альтернатива.

+1

Смешной пробный :) Maven не заставляет вас больше, чем Ant, чтобы перезапустить что-нибудь. –

+0

Хе-хе, мне было интересно, когда ты появится! Вы обратились к адвокату Maven, как медведь, чтобы мед;) –

+0

LOL! Я знал это! –

0

Плагин Maven tomcat может помочь вам, вы просто выполняете «mvn tomcat: redeploy», а maven компилируете исходный код, упаковываете его и развертываете в свой сконфигурированный tomcat, см. tomcat plugin для получения дополнительной информации.

3

Возможно, вы захотите взглянуть на JRebel. Он перезагружает ваши классы в запущенном tomcat, поэтому ваши изменения близки мгновенно. Я не использовал его много, но, похоже, он запрашивает хорошие комментарии.

+0

Или просто установите Glassfish v3, и вам не понадобится JRebel :) –

+0

JRebel работает так, как рекламируется. Он может устранить ВСЕ ваше время, потраченное на повторную упаковку и повторное развертывание. Должно быть, для любого магазина разработки –

0

В конце концов, я решил, что с помощью функции Eclipse с именем «Build Automatically» (Project → Build Automatically) установлен флажок.
Каждый раз, когда вы сохраняете ресурс, Eclipse компилирует его и перемещает файл .class в выходную папку.