Как получить управляемые зависимостями 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, будут там.
Приветствия.