Лучшая практика для включения сторонних банок в основную библиотеку? - PullRequest
2 голосов
/ 17 февраля 2009

У нас есть базовая библиотека, которую мы включаем в качестве JAR во все наши веб-приложения для максимального повторного использования кода. Теперь мы хотели бы включить некоторые функции через эту базовую библиотеку через стороннюю библиотеку (iText).

Добавление iText JAR в базовую библиотеку не работает, потому что загрузчик классов не находит вложенные JAR. Мы не хотим добавлять JAR iText в каждое веб-приложение, потому что веб-приложения не используют iText, они используют библиотеку, которая использует iText. Семантика? Возможно, но добавление сторонних JAR-файлов в веб-приложение, чтобы используемая им библиотека могла получить доступ к классам в JAR, выглядит грязно.

Я скучаю по простой практике, которая решает эту проблему, или лучше всего подходят jar-merging и пользовательские загрузчики классов?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2009

Добро пожаловать в ад JAR, постоянная проблема в разработке Java и одна из главных причин, почему OSGi набирает обороты. «Грязные» подходы были стандартными в отрасли лишь совсем недавно, и затраты на чистые подходы могут значительно перевесить стоимость быстрого и грязного подхода.

Но, чтобы ответить на ваш вопрос, на большинстве серверов приложений есть место, где вы можете разместить JARS, которые доступны для всех веб-приложений. Например, у Tomcat есть каталог common / lib. Вы, вероятно, хотите поставить свой JAR там.

1 голос
/ 21 февраля 2009

Если вы раздаете войны, вам нужно поместить банку iText в войну.
Если вы распределяете уши, вы можете поместить все банки, общие для нескольких войн, в корень уха.
Если jar является общим для многих ушей, есть возможность поместить его в директорию библиотеки веб-сервера. Этот последний вариант, на мой взгляд, не рекомендуется, поскольку вы можете использовать разные версии jar в каждом ухе, что приводит к конфликту, и размещение jar внутри корня сервера обычно не является стандартным механизмом распространения.
Существуют инструменты, которые упакуют все ваши библиотеки и вставят их в одну банку, например Jar Jar Links.
Наконец, я рекомендую использовать Maven или аналогичный инструмент для управления вашими зависимостями и автоматизации ваших сборок. Это может быть очень полезно, так как зависимости начинают расти.

1 голос
/ 17 февраля 2009

Для этого, вероятно, подойдет EAR. Ничего подобного другому слою косвенности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...