Какие банки должны присутствовать в WEB-INF \ lib и в .classpath - PullRequest
0 голосов
/ 05 марта 2012

Я конвертирую обычное приложение J2EE для использования Maven.Мне удалось успешно преобразовать в Maven, и я получаю успешное "mvn deploy".Проблема возникает после развертывания уха на WAS.Я получаю SRVE0203E: Сервлету [action] org.apache.struts.action.ActionServlet не хватает другого обязательного класса.

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

  1. Как мы можем определить, какие файлы должны присутствовать в папке WEB-inf \ lib?

  2. Как можномы определяем, какие все банки должны присутствовать в метаинфекте .class-path of wars.

  3. Как мы можем определить, что война будет работать, даже если банка упоминается в.classpath, но не обязательно, что он должен присутствовать в web-inf \ lib (т. е. загрузчик классов будет тянуть с уха вместо войны)

FYI Я использую j2ee 1.4

1 Ответ

2 голосов
/ 05 марта 2012

Приложение Java EE, выполняющееся в контейнере, имеет путь к классам, состоящий из нескольких уровней:

  1. путь к классу веб-приложения, представленный файлами JAR и Class, включенными в WEB-INF / lib
  2. Путь к классу корпоративных приложений, который включает файлы JAR, объявленные на уровне EAR
  3. Путь к классу контейнера, который содержит библиотеки времени выполнения Websphere и общие библиотеки

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

Имея это в виду, упрощенным подходом будет поместить все файлы JAR вашего приложения в WEB-INF / lib. Это будет работать, но если в вашем EAR есть два веб-модуля, то для каждого модуля потребуется собственный набор JARS. Более надежный подход будет включать общие JAR-файлы на уровне EAR, чтобы избежать дублирования JAR.

Если дело в том, что в вашей компании есть пропиетальная структура, которую используют все приложения, было бы глупо включать одни и те же JARS в каждое приложение EAR компании. Лучший способ сделать это - настроить инфраструктуру компании как общую библиотеку в контейнере, чтобы ее можно было использовать во всех приложениях.

В заключение, существует несколько факторов, которые определяют путь к классу вашего приложения Java EE. Вы должны всегда помнить, чтобы избежать двуличности и конфликта версий, чтобы ваше приложение могло плавно разрешать его зависимости.

...