Как обрабатывать оверлеи Maven WAR в Eclipse?

У меня есть многомодульный проект Maven, в котором используются оверлеи WAR (стек из них 3 в глубину). В Maven все отлично работает, но я не могу запустить WAR из Eclipse, потому что он жалуется, что не находит различные файлы.

Как настроить Eclipse (и программу запуска), чтобы я мог запускать WAR из Eclipse без предварительной установки Maven? Я должен добавить, что мои проекты Eclipse WAR не являются динамическими веб-проектами... это часть того, что мне нужно делать?

ПРИМЕЧАНИЕ. Следующий вопрос затрагивает эту тему, но ответ указывает, что вы всегда должны сначала установить Maven, и я знаю, что это не может быть правильным, потому что есть люди, которые используют Eclipse без Maven.

наложения Maven и Eclipse

Я также нашел это, что заставляет меня думать, что это невозможно с помощью vanilla M2E:

http://jira.codehaus.org/browse/MNGECLIPSE-599


person HDave    schedule 13.12.2011    source источник


Ответы (1)


Я смог это сделать, и все работает отлично. Вот что нужно сделать:

Прежде всего, вам нужен подключаемый модуль M2E Eclipse, который необходим, чтобы Eclipse автоматически распознавал и обновлял зависимости Maven. Он также предоставляет хороший графический редактор POM. В конце 2011 года проект M2Eclipse был передан в дар фонду Eclipse компанией Sonatype и теперь называется просто M2E. . Однако он по-прежнему не поставляется с версией Eclipse Indigo для Java EE и должен быть установлен отдельно через их сайт обновлений.

В прошлом интеграция между Eclipse и Maven была несколько проблематичной. Однако эта новая интеграция Maven на основе Eclipse теперь учитывает тот факт, что в файлах POM используется множество подключаемых модулей Maven, и что только определенные цели определенных подключаемых модулей имеют смысл в среде IDE. Кроме того, те цели, которые имеют смысл при работе внутри IDE, могут потребовать специальной настройки. Для правильной обработки этого M2E теперь поддерживает понятие «коннектор».

У M2E есть длинный список специальных соединителей, которые позволяют ему делать «правильные вещи» при вызове различных моджо (цели плагина Maven). Чтобы просмотреть список доступных соединителей в Eclipse, перейдите в диалоговое окно «Настройки» и выберите «Maven->Dicovery->Открыть каталог». Эти соединители должны устанавливаться автоматически при обнаружении в файле {{pom.xml}} во время импорта проекта. Однако для этого требуется правильная версия мастера импорта M2E Maven (которого у Indigo не было до SR2).

Кроме того, иногда эти соединители содержат ошибки, и нам нужно использовать сайты ночных или бета-обновлений, чтобы получить последние исправления. Если у вас более старая или глючная версия, то после обновления необходимо удалить и повторно импортировать проекты. По этим причинам, на мой взгляд, все коннекторы M2E должны быть установлены вручную до импорта вашего проекта в Eclipse.

Соединитель M2E-WTP нужен для того, чтобы оверлеи WAR работали в средствах запуска Eclipse для «Серверов» Eclipse. Этот коннектор используется для интеграции Maven с WTP... и, таким образом, обрабатывает оверлеи WAR, настройку контейнера сервлетов, конфигурацию Eclipse WTP, настройку корневого контекста и другие вещи, которые позволяют веб-инструментам Eclipse «просто работать», когда модуль Maven WAR импортируется в Eclipse как проект.

Сайт обновления коннектора m2e-wtp: http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

Добавьте этот сайт M2E-WTP и установите соединитель. Однако обратите внимание, что ни M2E, ни коннектор M2E-WTP не будут помещать зависимости WAR оверлея в окончательный WAR. Вы должны сделать это, добавив необходимые зависимости в окончательный файл WAR pom.xml. Я не знаю, почему инструменты этого не делают, но они этого не делают, так что просто смиритесь с этим. ;-)

На этом этапе я бы также рекомендовал выполнить полное обновление через {{Справка->Проверить наличие обновлений}}. Как только это будет сделано, вы сможете просто добавить сервер Eclipse, щелкнуть свой проект (не оверлейный, а обычный) и выбрать "Запустить на сервере...".

Изменения, внесенные либо в WAR, либо в оверлейный WAR, будут автоматически опубликованы на вашем сервере. Изменения Javascript публикуются без перезапуска сервера... все, что вам нужно сделать, это нажать кнопку «Обновить» в браузере, чтобы увидеть, как работает новый код.

Второе обновление: обнаружена ошибка (https://issues.sonatype.org/browse/MECLIPSEWTP-174) в M2E, что может привести к случайной потере всех файлов JAR из каталога WEB-INF/lib. Когда это произойдет, ваше приложение сервлета, очевидно, не запустится. Обходной путь — очистить сервер, щелкнув правой кнопкой мыши на сервере и выбрав «очистить». Обратите внимание, что очистка рабочего каталога сама по себе не восстановит эти отсутствующие JAR-файлы.

person HDave    schedule 08.03.2012
comment
Рад, что нашел этот ответ. Но это не работает для меня. Я попробовал очень простой случай: простой военный проект A, простой военный проект B и pom A объявляет войну B как зависимость, но фактически не использует какой-либо класс из B - в этом случае mvn install успешно работает с оверлейным проектом B добавлен в войну A, как и ожидалось. Но если я добавлю в проект A некоторую ссылку на класс из B, я вижу две проблемы: (1) eclipse не может разрешить ссылку на класс из B. (2) mvn install (из eclipse или из командной строки) завершается с ошибкой компиляции. в каждом месте кода A, где я ссылаюсь на класс из B. - person rapt; 16.02.2013
comment
Установка разъема, как вы предложили, не решила эти проблемы. Что мне здесь не хватает? - person rapt; 16.02.2013
comment
Однако обратите внимание, что ни M2E, ни коннектор M2E-WTP не будут помещать зависимости WAR оверлея в окончательный WAR. У меня именно эта проблема, знаете ли вы какие-либо другие обходные пути. Тот, который вы предоставили, не будет работать в моем случае. - person Hoffmann; 24.07.2013
comment
Вы будете ненавидеть это, но в итоге я создал еще один модуль Maven, который объединил все зависимости в JAR перед упаковкой WAR. Да, это неуклюжий обходной путь, но он успешно работал в течение прошлого года. - person HDave; 25.07.2013