servlet-api.jar не может быть загружен - PullRequest
1 голос
/ 23 ноября 2011

Я использую Eclipse Indigo 3.7, Tomcat7, Spring MVC Framework 2.5.6.

В одном из моих проектов приложений у меня появляется это сообщение об ошибке:

nov. 22, 2011 9:06:30 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
Infos: validateJarFile(/home/pc/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringMVC/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Я прочитал, что для проекта веб-приложения, подобного моему, servlet-api.jar не должен быть включен в путь сборки проекта; Это правильно? Где я должен поместить servlet-api.jar, потому что в моем приложении есть сервлет?

Также я хотел бы спросить:

Я часто читаю, чтобы поместить файлы jar в папку WEB-INF / lib, иногда я читаю, чтобы включить их в путь сборки проекта как внешний Jar, иногда я читаю, чтобы сделать оба одновременно.

Например, я прочитал это: -servlet-api.jar уже находится в каталоге Tomcat7 / lib, но его также необходимо включить в путь проекта; Драйвер JDBC MySQL для Java должен быть включен в путь проекта, а также скопирован в каталоги WEB-INF / lib и Tomcat7 / lib.

Может кто-нибудь сказать мне правду и помочь мне действительно понять, как управлять «Jar librairies» в проекте в затмении?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011
  • Я прочитал, что для проекта веб-приложения, подобного моему, servlet-api.jar не должен быть включен в путь сборки проекта;Это правильно?Где я должен поместить servlet-api.jar, потому что в моем приложении есть сервлет?

    Контейнеры сервлетов (такие как Tomcat) содержат JAR сервлетов в classpath.Таким образом, WAR вашего приложения должен исключать его.

  • Я читаю часто, чтобы поместить файлы jar в папку WEB-INF / lib, иногда я читаю, чтобы включить их впуть сборки проекта как внешний Jar, иногда я читаю, чтобы сделать оба одновременно.

    JAR, на которые ссылается ваше приложение, обычно помещаются в WEB-INF/lib.Исключение составляют такие вещи, как servlet.jar.Они понадобятся вам в время компиляции , но вам придется исключить их из полученной WAR.

  • Я прочитал это: -servlet-api.jar уже находится в каталоге Tomcat7 / lib, но его также необходимо включить в путь проекта;Драйвер JDBC MySQL для Java должен быть включен в путь проекта, а также скопирован в каталоги WEB-INF / lib и Tomcat7 / lib.

    Это правильно.Чтобы усилить ответ на предыдущий вопрос, вам нужно , эти JAR-файлы имеют время компиляции, чтобы вы могли компилировать.Некоторые JAR-файлы, например servlet-api, предоставляются контейнером сервлета.

  • Может кто-нибудь рассказать мне правду и помочь мне понять, как на самом деле управлять «библиотеками Jar»в проекте в eclipse?

    Инструменты сборки, такие как Maven, помогают управлять зависимостями внешней библиотеки вашего проекта с детальным контролем над , когда необходимы эти зависимости (только время компиляции, компиляцияи тестирование во время выполнения и т. д.).

2 голосов
/ 23 ноября 2011

Каталог lib tomcat является общим местом для библиотек, которые используются внутри tomcat и доступны всем приложениям, развернутым на этом экземпляре tomcat. Вы ожидаете найти здесь servlet-api.jar, поскольку он является частью того, что делает tomcat движком сервлета. Вы можете найти более подробное объяснение материала загрузчика классов tomcat здесь:

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

Папка /WEB-INF/lib вашего проекта содержит библиотеки, которые являются частными только для вашего веб-приложения и невидимы для любого другого развернутого приложения на tomcat. Здесь вы ожидаете разместить библиотеки для технологий, которые вы используете для создания веб-приложения, таких как Spring, JUnit и, возможно, Hibernate.

Обновление:

Что касается управления вашими библиотеками с помощью Eclipse, я настоятельно рекомендую вам использовать систему сборки (если вы этого еще не сделали), такую ​​как ANT или Maven.

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

ANT может потребовать от вас немного больше усилий, если вам нужно вручную управлять каталогом WEB-INF/lib, но вы также можете использовать Apache Ivy, чтобы помочь с этим. Быстрый поиск в Google покажет много, много уроков по использованию этих инструментов.

Надеюсь, это поможет.

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