У меня есть четыре разных проекта, и я использую Weblogic для развертывания своих проектов. Есть несколько библиотек (файлов jar), которые являются общими для всех проектов. В настоящее время каждый из моих проектов имеет каталог lib и имеет почти одинаковый набор библиотек. Теперь возможно ли иметь этот каталог lib вне файлов WAR и получать к ним доступ.
Как использовать общие библиотеки для нескольких веб-проектов Java
Ответы (7)
Не поддавайтесь искушению поместить файлы jar в «общую» папку вашего контейнера. Лучше хранить файлы jar там, где они сейчас. Сейчас может показаться хорошей идеей использовать общую папку, но в будущем вам может понадобиться развернуть приложение, для которого требуется общая библиотека, но другой версии.
При этом у меня нет опыта работы с WebLogic. В Tomcat есть общая папка с общими для всех развернутых приложений библиотеками. Не рекомендуется использовать это. Если WebLogic можно настроить на использование общей папки для набора приложений (а не для всех развернутых приложений), вы можете пойти на это.
Вы хотите сделать это? Если вы не ограничены в пространстве для развертывания, я бы (возможно) не советовал этого делать.
Почему ? На данный момент у вас есть 4 решения, работающие с этими библиотеками. Если вам нужно обновить одну из библиотек (скажем, если вы обнаружите ошибку или вам потребуется новая функция), вам придется протестировать совместимость и функциональность для всех 4 решений. Если у каждого решения есть собственный набор библиотек, то они изолированы, и вам не нужно перемещать все 4 на шаг.
Обратите внимание, что все это зависит от того, насколько легко регрессионное тестирование ваших решений. Вам может показаться, что это легко, и в этом случае возможно использование одного и того же набора библиотек.
Не делай этого.
Вся идея файлов WAR заключается в том, что они являются автономными единицами. Это значительно упрощает развертывание.
В дополнение к возможным конфликтам версий, на которые указывали другие, размещение jar-файлов в /shared может иметь очень вложенные последствия для видимости класса. Они будут в отдельном загрузчике классов и не смогут видеть классы в файле WAR. Если вы используете библиотеки, которые полагаются на Class.forName() для работы (а их много), это может стать очень болезненным.
Если вы действительно не можете позволить себе дополнительное дисковое пространство и память, обратите внимание на OSGi или Spring DM. Они решили эту проблему, но ценой увеличения сложности.
Поместите все общие файлы jar в папку common\lib weblogic. common\lib доступен для всех развернутых приложений.
Ну, во-первых, вы можете поместить все свои библиотеки в одно и то же место, и процесс сборки импортирует те, которые необходимы.
Для развертывания нового Weblogic 10 в каждом домене есть папка lib, куда вы можете поместить общие библиотеки. я не думаю, что это возможно до Weblogic 10
Вы можете поместить банки в их собственный файл уха и развернуть его как общую библиотеку.
Вы также можете поставить войны в ухо и добавить общие банки в APP-INF/lib. Это расширение Weblogic для J2EE, поэтому оно не будет работать на других серверах.
В настоящее время я использую другой подход.
- Создайте папку центрального репозитория и поместите туда все распространенные библиотеки.
- В каждом проекте вы можете создать ссылку на все необходимые библиотеки. В Subversion он работает с внешними элементами.
Каждый раз, когда обновляется локальная рабочая копия, обновляются внешние файлы, поэтому вам просто нужно зафиксировать в центральной папке, и она автоматически распространяется на все проекты.