Как использовать общие библиотеки для нескольких веб-проектов Java

У меня есть четыре разных проекта, и я использую Weblogic для развертывания своих проектов. Есть несколько библиотек (файлов jar), которые являются общими для всех проектов. В настоящее время каждый из моих проектов имеет каталог lib и имеет почти одинаковый набор библиотек. Теперь возможно ли иметь этот каталог lib вне файлов WAR и получать к ним доступ.


person Rakesh Juyal    schedule 30.06.2009    source источник


Ответы (7)


Не поддавайтесь искушению поместить файлы jar в «общую» папку вашего контейнера. Лучше хранить файлы jar там, где они сейчас. Сейчас может показаться хорошей идеей использовать общую папку, но в будущем вам может понадобиться развернуть приложение, для которого требуется общая библиотека, но другой версии.

При этом у меня нет опыта работы с WebLogic. В Tomcat есть общая папка с общими для всех развернутых приложений библиотеками. Не рекомендуется использовать это. Если WebLogic можно настроить на использование общей папки для набора приложений (а не для всех развернутых приложений), вы можете пойти на это.

person kgiannakakis    schedule 30.06.2009
comment
Хороший совет! Наличие дополнительной копии jar-файла сопряжено с очень небольшими накладными расходами, в то время как необходимость подделывать две версии общей библиотеки из одного и того же места или принудительное обновление всех ваших приложений до новой версии в один и тот же момент — настоящая боль. - person James Anderson; 30.06.2009
comment
Фактически после компиляции размер проекта составляет около 1,5 МБ (без библиотек) и 20 МБ (с библиотеками). - person Rakesh Juyal; 30.06.2009
comment
Вы можете использовать общую папку на своем компьютере для разработки, чтобы ускорить развертывание. В производственной среде это не имеет большого значения, поэтому лучше использовать большой файл WAR со всеми jar-файлами внутри. Если вы это сделаете, вам нужно провести тестирование дважды (как для маленькой, так и для большой WAR). - person kgiannakakis; 30.06.2009

Вы хотите сделать это? Если вы не ограничены в пространстве для развертывания, я бы (возможно) не советовал этого делать.

Почему ? На данный момент у вас есть 4 решения, работающие с этими библиотеками. Если вам нужно обновить одну из библиотек (скажем, если вы обнаружите ошибку или вам потребуется новая функция), вам придется протестировать совместимость и функциональность для всех 4 решений. Если у каждого решения есть собственный набор библиотек, то они изолированы, и вам не нужно перемещать все 4 на шаг.

Обратите внимание, что все это зависит от того, насколько легко регрессионное тестирование ваших решений. Вам может показаться, что это легко, и в этом случае возможно использование одного и того же набора библиотек.

person Brian Agnew    schedule 30.06.2009

Не делай этого.

Вся идея файлов WAR заключается в том, что они являются автономными единицами. Это значительно упрощает развертывание.

В дополнение к возможным конфликтам версий, на которые указывали другие, размещение jar-файлов в /shared может иметь очень вложенные последствия для видимости класса. Они будут в отдельном загрузчике классов и не смогут видеть классы в файле WAR. Если вы используете библиотеки, которые полагаются на Class.forName() для работы (а их много), это может стать очень болезненным.

Если вы действительно не можете позволить себе дополнительное дисковое пространство и память, обратите внимание на OSGi или Spring DM. Они решили эту проблему, но ценой увеличения сложности.

person Thilo    schedule 30.06.2009

Поместите все общие файлы jar в папку common\lib weblogic. common\lib доступен для всех развернутых приложений.

person Silent Warrior    schedule 01.07.2009

Ну, во-первых, вы можете поместить все свои библиотеки в одно и то же место, и процесс сборки импортирует те, которые необходимы.

Для развертывания нового Weblogic 10 в каждом домене есть папка lib, куда вы можете поместить общие библиотеки. я не думаю, что это возможно до Weblogic 10

person Nuno Furtado    schedule 30.06.2009
comment
В версии 9 есть поддержка общих библиотек: e-docs.bea.com /wls/docs92/programming/libraries.html - person McDowell; 30.06.2009

Вы можете поместить банки в их собственный файл уха и развернуть его как общую библиотеку.

Вы также можете поставить войны в ухо и добавить общие банки в APP-INF/lib. Это расширение Weblogic для J2EE, поэтому оно не будет работать на других серверах.

person Jon Strayer    schedule 19.08.2009

В настоящее время я использую другой подход.

  1. Создайте папку центрального репозитория и поместите туда все распространенные библиотеки.
  2. В каждом проекте вы можете создать ссылку на все необходимые библиотеки. В Subversion он работает с внешними элементами.

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

person guerda    schedule 30.06.2009