Eclipse WTP не публикует зависимости Maven - PullRequest
20 голосов
/ 03 марта 2012

Я пытаюсь настроить базовый проект hello world, используя Eclipse Indigo и сервер Tomcat.Я создал динамический проект с простым сервлетом.Протестировал сервлет и все заработало.Затем я включил поддержку Maven и добавил logback к своему pom.Я поместил логирование в метод сервлета doGet.При запуске сервлета он жалуется, что не может найти никаких привязок, потому что jar-файлы logback не копируются в экземпляр Eclipse tomcat.Я ожидал найти банки, опубликованные где-то здесь:

${workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\

Как мне заставить Eclipse правильно работать с WTP / Maven?Я также попытался установить разъем m2e-wtp без разницы.

Ответы [ 4 ]

51 голосов
/ 03 марта 2012

Проверьте Развертывание сборки (контекстное меню в проекте), должно быть отображение Зависимости Maven -> WEB-INF / lib .

13 голосов
/ 04 марта 2012

Исходя из опыта ASP.NET, я нахожу шокирующим то, как много работы требуется для запуска веб-приложения с Eclipse WTP и Maven, особенно если вы учитесь самостоятельно. Надеемся, что это краткое руководство поможет кому-то еще быстро набрать скорость.

Есть два способа заставить проект hello world работать в Eclipse WTP с Maven. Вы можете создать динамический веб-проект и затем добавить природу Maven, или вы можете сделать наоборот.

Предварительные условия для Eclipse с сайтами обновлений

Начальная конфигурация

  • Установить копию Tomcat 7 из http://tomcat.apache.org/download-70.cgi

  • Окно -> Настройки -> Сервер -> Среда выполнения

  • Добавьте Apache Tomcat 7.0 и выберите локальный каталог установки

Вариант 1. Создайте динамический веб-проект, затем добавьте Maven Nature

  • Создать новый проект Maven, выбрать архетип org.apache.maven.archetypes: Maven-архетип-WebApp

  • Изменение на перспективу Java EE.

  • Создайте новую исходную папку, src \ main \ java . Обратите внимание, что Eclipse недостаточно умен, чтобы сделать это для вас, а также порядок папок неправильный. Папка src \ main \ java указана после src \ main \ resources . Это можно исправить вручную позже в свойствах проекта.

  • Создать новый сервлет. Обратите внимание, что Eclipse по умолчанию использует этот файл в неправильной папке src \ main \ resources , поскольку порядок указан неверно. Вместо этого вручную выберите src \ main \ java . Измените сопоставление URL на второй странице мастера на / *, чтобы упростить тестирование.

  • Теперь наш сервлет готов, но зависимости от API сервлета не связаны. A) мы можем добавить сервлет api в качестве зависимости от нашего проекта или B) мы можем привязать конфигурацию сервера Eclipse для Apache 7.0.

  • Для варианта A добавьте эту зависимость в pom:

.

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-api</artifactId>
  <version>7.0.${set this}</version>
  <scope>provided</scope>
</dependency>
  • Для варианта B:

    • Свойства проекта -> Путь сборки Java -> Библиотеки -> Добавить библиотеку -> Время выполнения сервера -> Apache Tomcat 7.0
    • Щелкните правой кнопкой мыши и запустите на сервере:
  • Во внутреннем браузере должна появиться пустая страница, например http://localhost:8080/${artifact}

Тест публикации зависимостей :

  • Добавление времени йода в пом.

  • Добавьте эту строку в сервлет, созданный ранее для метода doGet, и импортируйте необходимые зависимости:

.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.getWriter().println("The time is now: " + new DateTime().toString());
}

Перезагрузите тестовую страницу, и результат должен быть:

Время пришло: 2012-03-03T14: 14: 29.890-05: 00

Теперь, если вы хотите поиграть с Servlet 3.0 и аннотациями, он не включен по умолчанию, по какой причине я не знаю. Сначала заставьте Maven использовать Java 1.6, добавив это в pom, иначе при каждом обновлении pom конфигурация будет возвращаться к Java 1.5.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>

Откройте Свойства проекта -> Фасеты проекта. Измените версию в разделе «Динамический веб-модуль» на 3.0, измените версию Java 1.6

Создайте новый сервлет с именем класса AnnotatedServlet в src \ main \ java и обратите внимание, как автоматически создается аннотация @WebServlet.

Вариант 2: создать динамический веб-проект, а затем добавить Maven Nature

  • Выберите Tomcat Runtime и динамический модуль версии 3.0
  • Создать исходную папку src \ main \ java
  • Установить выходную цель по умолчанию \ классы
  • Установить контекстную директорию src \ main \ webapp
  • Проверить генерацию web.xml
  • Создание сервлета с отображением / * для быстрого тестирования
  • Добавить оператор вывода в метод doGet

response.getWriter().println("Another test");

  • Дважды щелкните «Дескриптор развертывания» и добавьте этот атрибут в корневой элемент веб-приложения metadata-complete="false"

  • Щелкните правой кнопкой мыши проект и выберите Запуск от имени -> Запуск на сервере

  • Щелкните правой кнопкой мыши проект -> Настройка -> Преобразовать в Maven Project
  • Выбрать упаковку как войну
  • Отредактируйте pom и установите компилятор для использования java 1.6 и добавьте зависимость joda-time:

.

<dependencies>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
1 голос
/ 02 июля 2013

Щелкните правой кнопкой мыши веб-проект в Project Explorer, затем выберите Maven -> Обновить проект

0 голосов
/ 24 мая 2013

Я столкнулся с подобной проблемой, и хотя я правильно настроил сборку развертывания, она все равно не работала. Затем я обнаружил, что в Window -> Preferences -> My Eclipse -> Java Enterprise Project -> Web Project на вкладке Deployment управление зависимыми проектами было отключено. Я изменил его, чтобы развернуть фляги зависимых проектов в папку lib, и тогда все заработало как шарм. Я мог бы даже отключить опцию Deployment Assembly.

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