Как вы обеспечиваете упаковку зависимостей библиотеки Utility Projects в окончательный EAR в Eclipse Galileo? - PullRequest
2 голосов
/ 27 апреля 2010

У меня есть «Utilty Project» и «EAR Project», который включает в себя «Utility Project». Все классы из 'Utility Project' в итоге будут упакованы как JAR и помещены в каталог 'lib' экспортируемого EAR, например:

  EAR.ear
    META-INF
      MANIFEST.MF
    lib
      utility.jar (which expands to):
        META-INF
          MANIFEST.MF
        com
          acme
            Foo.class
            Bar.class

Однако «служебный проект» использует библиотеку (freemarker.jar), которая была добавлена ​​в путь сборки с помощью «Свойства> Путь сборки Java> Библиотеки». Все, что я хочу сделать, это добавить freemarker.jar в EAR следующим образом:

  EAR.ear
    META-INF
      MANIFEST.MF
    lib
      **freemarker.jar**
      utility.jar (which expands to):
        META-INF
          MANIFEST.MF
        com
          acme
            Foo.class
            Bar.class

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

Из свойств «Утилиты»:

  1. Если я выберу «Путь сборки Java> Порядок и экспорт» и выберу «freemarker.jar» для экспорта, jar вообще не окажется в файле EAR.
  2. Если я нажимаю «Зависимости модуля Java EE» и выбираю библиотеку «freemarker.jar» в качестве зависимости, она говорит:

Этот JAR-пакет является библиотекой EAR проект и должен быть упакован в директорию библиотеки EAR. Это конфликтует с классом манифеста зависимость от пути вы пытаетесь Создайте. Если вы создаете эту зависимость, баночка будет упакована в корень (не библиотека) каталог EAR. Вы уверены, что хотите продолжить?

Из свойств 'EAR Project':

  1. Если я щелкну «Зависимости модуля Java EE> Добавить JAR-файлы ...» и перейду к «freemarker.jar» и сделаю его зависимым, он будет добавлен в корень EAR: /freemarker.jar
  2. Если я сделаю то же, что и выше, но установлю флажок «In Lib Dir», он будет добавлен в папку lib, но содержится в другой папке lib: /lib/lib/freemarker.jar

Спасибо.

Ответы [ 2 ]

7 голосов
/ 28 апреля 2010

Мне удалось решить эту проблему.В окне «Проблемы» я получал следующее предупреждение:

Запись пути к классу /utility-project/lib/freemarker.jar не будет экспортирована или опубликована.Могут возникнуть Runtime ClassNotFoundExceptions.

Я по какой-то причине попытался использовать комбинацию клавиш Ctrl-1, которую использовал для быстрого решения проблем с исходным кодом.Оказывается, это также обеспечивает быстрое решение для данных ошибок и предупреждений.Я выбрал первый из двух вариантов:

Пометить связанную необработанную запись пути к классу как зависимость публикации / экспорта.

и моя проблема исчезла!

Как ни странно, все, что, похоже, это сделало, это заставило lib 'freemarker.jar' быть выбранным в диалоге свойств 'Java EE Module Dependencies', что я все равно делал сам.Это может быть ошибка Eclispe!

0 голосов
/ 24 апреля 2013

@ MonoThreaded: После использования быстрого исправления> пометьте связанную необработанную запись пути к классу как опубликованную / экспортную зависимость, если вы щелкнете правой кнопкой мыши по проекту> свойства> сборка развертывания, вы заметите, что eclipse добавила новую запись, что-то вроде источник: /freemaker.jar, путь развертывания: ../lib. Вы также можете сделать это, выбрав Add> Java Build Path Entry.

...