Как получить управляемые зависимостями maven, скопированные в war\web-inf\lib, чтобы запустить приложение GWT 2.0 в режиме отладки в Eclipse?

Я обновляю существующий проект от GWT 1.5.2 до GWT 2.0.0. Мы используем maven 2 для управления нашими зависимостями и делаем все наше развитие в Eclipse 3.5.

Поскольку мы используем maven для управления нашими зависимостями, у меня нет всех этих банок в каталоге war\web-inf\lib, как указывает GWT. Вместо этого они находятся в репозитории maven, где их любят maven. У меня настроен проект, так что maven может успешно создавать и запускать в режиме dev или web, и приложение работает правильно.

Проблема в том, что когда я запускаюсь из Eclipse, я получаю java.lang.NoClassDefFoundError. Если я вручную копирую свои зависимости в war\web-inf\lib перед запуском, все работает нормально, но это не поддается долгосрочному решению. Во-первых, если я проверю все эти банки на наш контроль версий, это приведет к искажению большей части стоимости, которую мы получаем от maven. Как раздражает, как maven может быть, канав это не ответ. Во-вторых, если разработчики вручную копируют их каждый раз, когда они хотят отлаживать что-то, это смешно.

Могу ли я заставить Eclipse копировать зависимости в war\web-inf\lib перед запуском? Есть ли альтернативное решение, которое мне не хватает?

Спасибо,

Тони

Ответы

Ответ 1

Запуск цели gwt:eclipse скопирует зависимости maven в war/WEB-INF/lib. См. Раздел Конфигурация Eclipse в Eclipse IDE Integration документация Maven GWT для получения более подробной информации. Также посмотрите этот ответ о Maven GWT 2.0 и Eclipse.

Ответ 2

Вы должны установить плагин m2eclipse и использовать его для создания своего проекта в пределах eclipse. Это вызовет maven как внешний инструмент изнутри затмения.

Тип вашего артефакта проекта maven должен быть настроен на войну, что позволит maven обнаруживать зависимости и связывать их.

Смотрите эти ссылки:

заставить Maven2 копировать зависимости в target/lib

http://maven.apache.org/plugins/maven-war-plugin/

http://maven.apache.org/plugins/maven-war-plugin/examples/rapid-testing-jetty6-plugin.html

Ответ 3

maven aware IDE (идея, затмение, netbeans) должна делать эту упаковку автоматически. возможно, вы:

  • забыл включить импорт maven внутри IDE?
  • не добавлял эти зависимости в pom.xml(поэтому они не включены в фазу "mvn package" )
  • добавлена ​​неправильная область для объявления зависимости (например, область "предоставлена" или "проверена" ), поэтому они игнорируются для времени выполнения

Ответ 4

Если у вас есть способ упаковки в вашем pom.xml, установленном для войны, он должен скопировать средства управления runtime в target/war/WEB-INF/lib.

Или ваш проект создает нечто большее, как ухо? Если это так, вы должны, вероятно, разделить ваш pom.xml на многопроектный формат.

Что касается Eclipse, я не очень хорошо знаком с этим, поэтому я не могу вам помочь. Вы (или можете) запускаете цель maven (например, "install" ) при выполнении или отладке?

Ответ 5

Это не должно быть проблемой. Если вы используете Eclipse + WTP, тогда WTP позволяет объявлять баны, перечисленные в разделе "зависимость модуля J2EE" в свойствах проекта. Эти банки автоматически публикуются в tomcat (см. Примечание в конце этого комментария) Вам нужно объявить переменную M2_REPO в среде eclipse (искать eclipse help для "переменных класса" ), она должна указывать на ваш локальный репозиторий maven и просто добавлять внешние баночки оттуда в ваш проект и отмечать их как "зависимости J2EE". Я сделал это с множеством проектов, Maven и Eclipse живут бок о бок:) (без m2eclipse)

Второй вариант - попытаться интегрировать Eclipse и Maven с плагином m2eclipse, как упоминалось в венге, но я счел это ненужным.

Существует третий вариант, если вы не используете WTP (но вы должны). Предполагая, что вы используете tomcat, вы можете скопировать эти банки в $(tomcat.home)/common/lib. Если вы можете сделать это только для своего частного экземпляра tomcat (на каждой машине для разработчиков), тогда вам будет хорошо. Это должно быть решение с низким уровнем воздействия, которое будет получать эти банки в classpath во время выполнения, но оно недостаточно масштабируется.

note: к сожалению, путь к классам веб-проектов Eclipse может сбить с толку. Когда вы добавляете банки в обычный путь сборки проекта, они не разворачиваются (копируются) в tomcat. Чтобы решить эту проблему, WTP определяет специальную библиотеку под названием Webapp Library - эта библиотека содержит все банки в папке WEB-INF/lib проекта, а также все внешние банки, помеченные как зависимости J2EE-модуля. Все эти банки подходят для WEB-INF/lib, когда публикуются в tomcat.

Ответ 6

Довольно просто: 1. Создайте папку "lib" в вашем проекте следующим образом:    "\ SRC\главная\WebApp\WEB-INF\Lib" 2. Скопируйте необходимые "банки" и т.д., Которые вы хотите включить в папку вашей папки WAR. 3. Вызовите свою сборку maven, как обычно. Я использую "mvn install", который создает сборку военного файла.

Если вы изучите WAR файл, ваши банки, которые вы включили в шаге-1 и шаге-2, будут там.

Приветствия.