Eclipse WTP не публикует зависимости Maven

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

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

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


person dcompiled    schedule 02.03.2012    source источник


Ответы (4)


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

person e-zinc    schedule 03.03.2012
comment
Спасибо за подсказку, это было правильно настроено, но не работает. В конце концов я узнал, что создание нового проекта с нуля сработало. В этом случае я создал проект, а затем добавил коннектор Maven WTP, и он неправильно настроил проект. - person dcompiled; 04.03.2012
comment
У меня была немного другая проблема, но это устранило ее. Я использовал Maven для создания своего проекта, в котором были снимки. Изначально у меня было включено разрешение рабочего пространства, а я выключил его. Eclipse был настроен на использование локального проекта, а не снимков из нашего репозитория nexus. Я продолжал получать CNFE и обнаружил это, что указывало мне на проблему, которая все еще пытается решить ее, а не публиковать. - person bh5k; 03.10.2012
comment
это мне очень помогло и в другом случае :) (аналогично) - person Alex; 30.03.2013
comment
В качестве более четких шагов: 1. Щелкните правой кнопкой мыши проект 2. щелкните Свойства 3. выберите Сборка развертывания. 4. (если его нет) нажмите «Добавить» 5. выберите (Записи пути сборки Java) 5. Выберите «Зависимость от Maven». - person Amr ElAdawy; 25.10.2015

Исходя из опыта работы с 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-archetype-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:

    • Project properties -> Java Build Path -> Libraries -> Add Library -> Server Runtime -> Apache Tomcat 7.0
    • Щелкните правой кнопкой мыши и запустите на сервере:
  • Во внутреннем браузере должна появиться пустая страница, например http://localhost:8080/ $ {artifact}.

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

  • Добавьте joda-time в помпон.

  • Добавьте эту строку в сервлет, созданный ранее для метода 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
  • Выберите упаковку как войну
  • Отредактируйте 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>
person dcompiled    schedule 03.03.2012
comment
В наши дни дела обстоят несколько лучше с более свежими версиями eclipse (мой процесс: создать новый проект maven, выбрать архетип веб-приложения, добавить зависимости maven в сборку развертывания, как описано в принятом ответе здесь, который, похоже, обычно работает ), но тот факт, что этот вопрос по-прежнему актуален, показывает, что он все еще не идеален. Но ни система веб-приложений в том виде, в котором она существует, ни maven на самом деле не были разработаны с учетом использования IDE, и, вероятно, поэтому у нас возникают подобные проблемы. В то время как все в .NET было разработано для хорошей интеграции с VS. - person Periata Breatta; 24.09.2016

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

person Igal Dvir    schedule 02.07.2013

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

person vanval    schedule 24.05.2013