Как добавить / usr / share / java libs в путь к классам веб-приложения? - PullRequest
3 голосов
/ 22 сентября 2008

Резюме

Возможно ли для веб-приложений, развернутых на linux + tomcat5.5, автоматически использовать / видеть все /usr/share/java/ банки?

Подробнее

Я упаковываю свое Java-приложение для Ubuntu (но вопрос связан с любым дистрибутивом на основе Linux) и собираюсь сделать так, чтобы оно зависело от tomcat.

Я собираюсь поместить дескриптор контекста (файл XML) в /usr/share/tomcat5.5/conf/Catalina/localhost/, чтобы развернуть мое приложение. Имея мой веб-каталог здесь: /usr/share/<appname>/web, как я могу включить в своем приложении использование java jar libs, установленного в системе (/usr/share/java)?

Я не могу просто символическую ссылку /usr/share/java -> <webdir>/WEB-INF/lib, так как у меня есть мои пользовательские банки должны быть помещены в lib DIR.

Плохое решение

Решение, которое я нашел до сих пор, состоит в том, чтобы символически связать каждую необходимую банку с <webdir>/WEB-INF/lib/.

Это не так хорошо, потому что мне нужно использовать символическую ссылку на множество jar-файлов и, что еще хуже, символическую ссылку на все jar-файлы, которые требует моя lib (jar) для прямой зависимости (и так далее) Если моя библиотека прямых зависимостей изменит свой список необходимых jar-файлов, мне придется сохранить эти символические ссылки.

Ответы [ 4 ]

2 голосов
/ 22 сентября 2008

В соответствии с документацией по загрузке классов Tomcat вам нужно поместить все разделяемые библиотеки, которые должны быть доступны для всех приложений Tomcat, в библиотеку $ CATALINA_BASE / shared / lib - так, один из способов сделать то, что вы ' Вам нужно переместить ваши библиотеки из / usr / share / java в $ CATALINA_BASE / shared / lib.

Однако, если я не неправильно понимаю ту же документацию, Tomcat также делает содержимое общесистемной переменной CLASSPATH доступным для загрузчика классов при запуске, поэтому, если ваш каталог - / usr / share / java - был включен в систему переменная CLASSPATH, то это тоже должно работать. Я никогда этого не делал; Метод Tomcat, позволяющий сделать содержимое каталога $ CATALINA_BASE / shared / lib доступным для Tomcat, всегда отлично меня обслуживал.

1 голос
/ 22 сентября 2008

Ответ Энцика привел меня к следующему решению.

Я собираюсь использовать модифицированное «плохое решение» (см. Вопрос).

Модификации следующие:

  1. Зависит от конкретной версии пакета для всех зависимостей (влияет на файл «control» во время упаковки для deb)
    пример: libcommons-io-java (= 1.3.1) вместо libcommons-ю-ява
  2. Символьная ссылка на актуальные файлы jar в `/ usr / share / java`, а не на" обобщенные ", пример
    :
    webdir / WEB-INF / lib / commons-io.jar - > /usr/share/java/commons-io-1.3.1.jar
    , а не
    webdir / WEB-INF / lib / commons-io.jar -> / usr /share/java/commons-io.jar

Эти изменения гарантируют, что веб-приложение не будет повреждено, если администратор установил новую версию библиотеки (например, commons-io).

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

0 голосов
/ 22 сентября 2008

Ты не должен этого делать. Предполагается, что приложения Java EE являются самодостаточными и не зависят от каких-либо ресурсов вне пакета развертывания, кроме тех, которые предоставляются контейнером. Поэтому вы должны взять нужные библиотеки из этого каталога и добавить их в свой пакет war или ear.

Это гарантирует, что ваше приложение будет вести себя одинаково везде, где вы его развернете, и вы не будете подвержены неожиданным изменениям в версиях библиотек в /usr/share/java....

0 голосов
/ 22 сентября 2008

У вас есть два варианта: один - позволить загрузчику классов предоставлять библиотеки всем java-программам, а другой - позволить загрузчику классов предоставлять библиотеки всем контекстам tomcat.

Добавьте символические ссылки в /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib (обратите внимание, что вам может потребоваться указать другую версию в этом пути), чтобы разрешить всем программам java доступ к эти библиотеки или добавьте их в общие библиотеки Tomcat по адресу var / lib / tomcat5.5 / shared / libs (опять же, номер версии может отличаться) для доступа ко всем контекстам Tomcat.

Следует также отметить, что эти каталоги были взяты из Ubuntu "Feisty".

...