Eclipse Tomcat, почему он продолжает копировать api jar сервлета - PullRequest
0 голосов
/ 24 января 2011

Я использую Eclipse и добавил сервер Tomcat 6.всякий раз, когда я пытаюсь запустить сервер, он автоматически копирует api jar сервера в папку WEBINF / lib, и приложение не запускается

INFO: validateJarFile(/media/01CB9CAC704E03A0/Projects/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/myapp/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Ответы [ 2 ]

4 голосов
/ 26 февраля 2011

У меня возникла та же проблема и, наконец, она заработала после просмотра этого среди других страниц.Я собираюсь перечислить это здесь в случае, если другие люди столкнутся с той же самой проблемой.

В моем случае, проект myeclipse был создан из файла .pom maven, который перечисляет файлы JEE 1.5 как «предоставленную» область, т.е.эти файлы будут предоставлены контейнером (в моем случае tomcat 6).Так что, если я создаю файл war, используя maven, и помещаю его в директорию webapps, он просто отлично работает.Делать это каждый раз, когда вы вносите изменения, становится немного утомительно, поэтому я решил пойти на развернутое развертывание, и вот тогда я столкнулся с той же проблемой.

Поскольку файл проекта был создан из файла pom, этипоявились зависимости, но файл проекта Eclipse не распознает их как «предоставленные» и не подлежащие развертыванию.И TOMCAT недоволен, когда находит две реализации спецификации:

"Спецификация сервлета 2.3 с 9.7.2 рекомендует ... Загрузчик классов, который контейнер использует для загрузки сервлета в WAR, должен позволять разработчику загружать любыересурсы, содержащиеся в библиотеках JAR внутри WAR, следуя обычной семантике J2SE с использованием getResource. Он не должен позволять WAR переопределять классы API J2SE или сервлетов Java. Кроме того, рекомендуется, чтобы загрузчик не разрешал сервлетам в WAR доступ к классам реализации веб-контейнера.Также рекомендуется, чтобы загрузчик классов приложений был реализован таким образом, чтобы классы и ресурсы, упакованные в WAR, загружались в предпочтении по сравнению с классами и ресурсами, находящимися в JAR-файлах библиотеки всего контейнера. "

Я поиграл с вышеуказанным решениемизменить конфигурацию сборки Deplyment, но это не полезно в одиночку, поскольку эти jar-файлы включаются, если я выбираю «JARS из пути сборки» в свойствах проекта меню / MyEclipse / Web / Deplyment / Configure wНастройки orkspace.И мне нужно сделать это, потому что у меня есть другие jar-файлы зависимостей (не предоставляются контейнером).

Решение:

  1. Я удалил эти jar-файлы из зависимостей в пути сборки.
  2. Вместо этого я добавил зависимость от пользовательской библиотеки - JAVA EE5.
  3. И в конфигурации развертывания я удалил опцию JARS, экспортированную из пользовательских библиотек необходимых проектов.

YMMV.Но в любом случае, если вы прочитаете приведенное выше определение спецификации сервлета, а затем посмотрите на конфигурацию в своем рабочем пространстве, вы можете разобраться с этим.

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

1 голос
/ 24 января 2011

Перейдите в свойства своего проекта и посмотрите страницу «Сборка развертывания». На этой странице описывается, как ваше приложение будет упаковано для развертывания или экспорта. Посмотрите записи о библиотеках. Вы должны выяснить, какая из этих записей указывает на api jar сервлета и удалить его. Если вход указывает на другие файлы jar, которые необходимо упаковать, вам нужно будет разделить его на несколько отдельных записей пути сборки, чтобы вы могли точно указать Eclipse, что нужно и не нужно упаковывать.

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