Чтобы включить весь пакет или только конкретные банки? - PullRequest
1 голос
/ 14 марта 2012

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

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Стандартный способ сделать это - упаковать все зависимые файлы jar в каталог WEB-INF/lib вашего WAR-файла. Большинство инструментов сборки, таких как Ant или Maven, делают это по умолчанию.

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

Рекомендация: не усложняйте.

0 голосов
/ 14 марта 2012

Лучший ответ будет "это зависит ...".

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

Пример: у вас есть webapp1 и webapp2, использующие jsf-api.jar - нет причин упаковывать этот jar в оба - вы можете выбросить его в общую библиотеку.В ситуации, которую вы описываете с 3 банками против 20 банок, я бы использовал некоторый инструмент для анализа графа зависимостей вашего приложения (чтобы упаковать как можно меньше).Инструмент для работы с графиком зависимостей, с которым я работал: CDA - анализатор зависимостей классов - это внешний инструмент, который генерирует графики зависимостей намного более читабельными, чем Classycle Eclipse-плагин или представление зависимостей класса Eclipse. (Возможно, другоеВ IDE есть лучшие инструменты? Я думаю, что IntelliJ делает ...)

Однако, если разные веб-приложения используют разные версии одного и того же стороннего фляги, вы можете столкнуться с конфликтами версий.Разрешение этих коллизий может быть PITA , и вам нужно будет понять, как работает механизм развертывания поставщика сервера приложений (политики загрузки классов как для компонента, так и для приложения).Таким образом, самым безопасным () будет включение нужных банок в WEB-INF \ lib вашей войны.

...