ant: Нужна помощь в упаковке EJB и его зависимостей в EAR - PullRequest
3 голосов
/ 12 августа 2010

Моя цель довольно проста: использовать ant для создания EAR, который содержит 1 EJB и 1 jar, содержащий все зависимости. Этот jar, называемый common.jar, для примера содержит файлы jar производителя, а также другие xml-файлы, от которых зависит EJB и которые он должен будет видеть во время выполнения ....

Пока у меня все правильно упаковано как EAR вот так:

EARFILE.ear
 -EJBFILE.jar
   /META-INF
     -MANIFEST.MF
 -common.jar
   /META-INF
     -MANIFEST.MF
   /lib
     -(all vendor jars inside here)
   -(All the xml config files are inside the root of the common.jar)

Внутри MANIFEST.MF для EJBFILE.jar есть ...

Class-path: ../../common.jar

Внутри MANIFEST.MF для common.jar есть ...

Class-path: ../lib/some_common.jar

Когда я развертываю это, appserver (websphere) не может найти файл JAR, когда я пытаюсь запустить сервер. Я получаю ClassDefNotFoundError, потому что классы внутри EJB не могут найти JAR-файлы поставщика, когда я пытаюсь запустить экземпляр. Тем не менее, я знаю, что common.jar настроен правильно, хотя EJB-компонент не скомпилировался бы, так как ему нужно было, чтобы эти jar-файлы вендора были в пути к классам для javac.

Итак, что я хочу знать, это:

  1. Как мне заставить среду выполнения правильно просматривать файлы jar поставщика.
  2. Будет ли EJB видеть файлы XML во время выполнения? Я обеспокоен этим, потому что эти xml-файлы расположены вне EJB внутри фляги, которая находится только в EAR, это даже не модуль, это просто фляга внутри EAR.
  3. Имеет ли это значение при использовании веб-сферы? Из того, что я собираю, некоторые контейнеры даже не заботятся о том, что находится в Class-path MANIFEST.MF.

1 Ответ

1 голос
/ 12 августа 2010

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

  1. Прежде всего, используйте атрибут appxml задачи Ant ear, чтобы указать дескриптор развертывания (обычно с именем application.xml); также включите ссылки на файлы JAR поставщика, связанные как определено ниже
  2. Я бы порекомендовал вам не помещать файлы JAR вашего поставщика в другой JAR - вместо этого просто скопируйте их в EAR на том же уровне, что и EJBFILE.jar
  3. XML-файлы конфигурации могут находиться в подкаталоге EJBFILE.jar (например, config), а затем вы можете ссылаться на них как /config/filename.xml.

Файл application.xml сообщит WebSphere, где найти файлы JAR. Обратный путь к классам на сервере приложений не такой, как у компилятора, который JBoss научил меня сложному пути.

Я использую все вышеперечисленные шаблоны, и мой код в контейнере (развернутый в EAR) может видеть все мои файлы XML, а также находить все мои зависимости.

...