Спецификация файла JAR против WAR - PullRequest
3 голосов
/ 15 марта 2012

Я заметил, что WAR-файлы должны иметь каталоги classes/ и lib/ для хранения их корневых файлов и зависимостей соответственно.

Я также заметил, что JAR-файлы не принято содержать такой каталог lib/ и содержать свои собственные зависимости.

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

Что я не "получаю" здесь?!?

Ответы [ 4 ]

3 голосов
/ 15 марта 2012

С концептуальной точки зрения:
jar обычно представляет собой одну библиотеку, которая может использоваться и может иметь или не иметь зависимости.
Но идея заключается в том, что определенная функциональность может быть предоставлена ​​в виде библиотеки в jar.

A war - это отдельное приложение, поэтому оно должно включать все зависимости

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

Файлы WAR (в основном веб-приложения) распакованы, и все файлы JAR внутри папки lib будут находиться в пути к классу вашего веб-приложения во время работы.

JAR-файлы могут также содержать jar-файлы, но не будут найдены и загружены загрузчиком классов по умолчанию.

Существуют специальные загрузчики классов, которые загружают файлы JAR внутри файлов JAR, но не стандартные.

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

Поскольку, если вы не используете собственный загрузчик классов, который может загружать классы из вложенных jar-файлов (например, JarClassLoader ), вы не можете загружать классы из вложенных jar-файлов.Контейнеры сервлетов и приложений будут добавлять файлы jar, содержащиеся в файлах war / ear, в путь к классам их приложений.

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

Это контейнеры различного назначения.

  • Jar предназначен для файлов и ресурсов класса Java и может быть библиотекой или непосредственно запускаемым приложением.

  • War - это контейнер для упаковки завершенных Web приложений, включая все зависимости (например, файлы Jar и другие веб-ресурсы).

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

...