Есть ли причины размещать зависимость в каталоге lib веб-сервера, а не включать его в файл War?

StackOverflow https://stackoverflow.com/questions/1438738

Вопрос

Если у меня есть Jar зависимостей для моего приложения, лучше ли поместить его в каталог lib файлов war или в глобальный каталог приложений сервера (например, Tomcat)? Что я получу, используя один подход над другим?

Дисковое пространство приходит на ум, но мы живем во времена, когда дисковое пространство дешевое. Есть ли разница в использовании памяти? Может ли кто-то с большим опытом, чем я, перечислить плюсы и минусы обоих вариантов?

Это было полезно?

Решение

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

Однако я сталкивался со случаями, когда установка библиотек в контейнер имеет смысл. Например,

<Ол>
  • У нас есть несколько внутренних библиотек, используемых каждым веб-приложением, и они огромны. Мы устанавливаем их в контейнер, чтобы все веб-приложения использовали одну и ту же версию, а также экономили память и дисковое пространство.

  • Библиотеки, установленные в WEB-INF / lib, недоступны для контейнера. Если вам нужно сослаться на них в context.xml (как драйвер JDBC, определенный в Ресурсах), вы должны поместить их в server / lib.

  • Если вы хотите отправить журналы log4j из всех веб-приложений в один и тот же файл, вы должны поместить jar log4j на сервер / lib. В противном случае каждое веб-приложение использует собственный регистратор.

  • Другие советы

    Если вы хотите использовать возможности управления ресурсами контейнера - например, подключение к базе данных SQL и предоставление для нее JNDI-поиска и пула соединений - тогда самому программному обеспечению контейнера потребуется доступ к библиотекам и драйверам для управления ресурсами.

    В противном случае вы, вероятно, не захотите устанавливать их в каталог server / lib и предполагать, что они есть и будут работать, поскольку разные веб-приложения могут иметь несколько разные требования к версии.

    Для подробного описания иерархии загрузчиков классов, реализованной Catalina, вы должны проверить Загрузчики классов КАК . Это поможет вам понять, когда сделать банки доступными для контейнера, для всех веб-приложений, только для одного веб-приложения ... и где их разместить.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top