Maven + eclipse + servlet-api.jar

Я использую Eclipse вместе с плагином m2eclipse для создания и управления моим проектом. В POM я включил запись для servlet-api:

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
  </dependency>

Предоставляется область действия, а не включать файл .jar в .war-пакет (он уже предоставлен контейнером сервлетов tomcat). Компиляция mvn install правильная, файл не включен в WEB-INF\lib, развертывание в tomcat работа, программа работает, все в порядке.

Но случай начинается с Eclipse. После запуска моего веб-приложения из eclipse я получаю сообщение об ошибке:

\ WEB-INF\lib\servlet-api-2.5.jar) - jar не загружен. См. Servlet Spec 2.3, раздел 9.7.2. Класс нарушения: javax/сервлет/Servlet.class

Я не знаю, почему, потому что Зависимости Maven (включая javac-servlet-2.5.jar) включаются как Зависимости модуля Java EE и должны be, помещенный в папку WEB-INF\lib, начиная с eclipse. С другой стороны, в eclipse я предоставил путь к моему каталогу apache tomcat и внутри проекта, есть автоматические ссылки на библиотеки из Apache Tomcat v6.0, включая servlet-api.jar.

В принципе, после удаления ссылки с POM на servlet-api-2.5.jar эта библиотека исчезает из Maven Dependencies, и я не получаю исключения при запуске моего веб-приложения из eclipse. Все отлично... в eclipse.

Конечно, без записи внутри POM, на этот раз mvn install отказывает с тем же исключением, я уже предоставил ранее.

Есть ли способ заставить его работать, не удаляя и не вставляя ссылку, в зависимости от того, что я хочу сделать: скомпилировать с maven или запустить с Eclipse?

Привет

Ответ 1

Это

\ WEB-INF\lib\servlet-api-2.5.jar) - jar не загружен. См. Раздел Servlet Spec 2.3, раздел 9.7.2. Класс нарушения: javax/servlet/Servlet.class

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

Похоже, проблема связана с частью/плагином для Eclipse, который загружает ваш проект на встроенном сервере приложений - кажется, что он просто использует список зависимостей, как то, что связывает в качестве пути к библиотеке, и не имеет понятия о областях Maven.

Лично я бы проигнорировал что-то вроде этого: ваша сборка Maven работает нормально, запуск приложения в Eclipse должен работать отлично, кроме этого невежественного предупреждения - в противном случае вам придется идти по пути настройки вашего проекта на то, что один инструмент ожидает (плагин для веб-приложений для Eclipse) по сравнению с другим (Maven).

(Также я всегда обнаружил, что запуск webapps как "веб-проектов" в Eclipse - это боль в прикладе и приводит ко всем видам странностей - не стоит хлопот - если вы хотите быстро загрузить свой проект Maven Webapp в контейнере сервлетов просто используйте mvn jetty:run или mvn tomcat:run Борьба с IDE может быть пустой тратой времени).