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

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

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

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

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

Спасибо

Tony

Ответы [ 6 ]

11 голосов
/ 06 января 2010

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

2 голосов
/ 06 января 2010

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

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

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

Ваш тип артефакта проекта maven должен быть установлен на war, что позволит 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

1 голос
/ 05 января 2010

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

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

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

0 голосов
/ 15 сентября 2010

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

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

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

0 голосов
/ 06 января 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...