Файл .war vs .ear

566

В чем разница между файлами .war и .ear?

риа
источник
2
Чтобы узнать больше о .JAR, .WAR and .EARВы также можете посмотреть видеоурок. Это очень просто или более понятно. Он объяснит , что это разница между .JAR, .WAR и .ear видео - учебник : разница между .JAR, .WAR и .ear
Бхарти Рават
2
Добро пожаловать в мир Java, где кто-то думал, что оставлять файл zip с расширением .zip недостаточно, и поэтому его нужно переименовать в .jar / .ear или .war в зависимости от того, куда вы его в конечном итоге перемещаете.
фисташка

Ответы:

492

Из GeekInterview :

В приложении J2EE модули упакованы как EAR, JAR и WAR в зависимости от их функциональности.

JAR: EJB-модули, которые содержат корпоративные Java-бины (файлы классов) и дескриптор развертывания EJB, упакованы как JAR-файлы с расширением .jar

WAR: Веб-модули, которые содержат файлы классов Servlet, JSP-файлы, вспомогательные файлы, GIF и HTML-файлы, упакованы в виде JAR-файла с расширением .war (веб-архив).

EAR: все перечисленные выше файлы (.jar и .war) упакованы в файл JAR с расширением .ear (корпоративный архив) и развернуты на сервере приложений.

elhoim
источник
63
Эти посты заставляют меня думать, что EAR - это просто JARS и WARS вместе в большом EAR, что, я думаю, не так просто.
Лай Гонсалес
4
Все по сути являются архивами (JAR), но с разным расширением, подразумевающим их природу / содержание.
KNU
1
EAR и отдельные JAR для bean-компонентов в большинстве случаев не нужны. Простая WAR со всеми классами в одном архиве - это нормально. Вот более подробное объяснение: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Каспарс Ринкевичс
599

WAR (Web Archive) представляет собой модуль , который загружается в веб - контейнер в виде Application Server Java . Сервер приложений Java имеет два контейнера (среды выполнения) - один является веб-контейнером, а другой - контейнером EJB.

В веб-контейнере размещаются веб-приложения, основанные на JSP или Servlets API, разработанные специально для обработки веб-запросов, что в большей степени относится к распределенным вычислениям типа запрос / ответ . Веб-контейнер требует, чтобы веб-модуль был упакован как файл WAR - это специальный файл JAR с web.xmlфайлом в WEB-INFпапке.

В контейнере EJB размещаются Java-бины Enterprise, основанные на API-интерфейсе EJB, предназначенном для предоставления расширенных бизнес-функций, таких как декларативные транзакции, безопасность на уровне декларативных методов и поддержка многопротокольных протоколов - так что это скорее стиль распределенных вычислений RPC . Контейнеры EJB требуют, чтобы модули EJB были упакованы как файлы JAR - они содержат ejb-jar.xmlфайл в META-INFпапке.

Корпоративные приложения могут состоять из одного или нескольких модулей, которые могут быть веб-модулями (упакованными в файл WAR), модулями EJB (упакованными в файл JAR) или обоими. Корпоративные приложения упакованы в файлы EAR - это специальные файлы JAR, содержащие application.xmlфайл в META-INFпапке.

По сути, EAR-файлы - это расширенный набор, содержащий WAR-файлы и JAR-файлы . Серверы приложений Java позволяют развертывать автономные веб-модули в файле WAR, хотя внутри они создают файлы EAR в качестве оболочки для файлов WAR. Автономные веб-контейнеры, такие как Tomcat и Jetty , не поддерживают файлы EAR - они не являются полноценными серверами приложений. Веб-приложения в этих контейнерах должны быть развернуты только в виде файлов WAR.

На серверах приложений файлы EAR содержат конфигурации, такие как сопоставление ролей безопасности приложений, сопоставление ссылок EJB и сопоставление корневых URL-адресов контекста веб-модулей.

Помимо веб-модулей и модулей EJB файлы EAR могут также содержать соединительные модули, упакованные в виде файлов RAR, и клиентские модули, упакованные в файлы JAR.

Рутеш Махиджани
источник
32
+1, потому что этот ответ описывает, почему вы можете использовать один или другой.
Джейсон Уилер
7
@KNU да, .jar, .warи .earфайлы простые почтовые архивы, таким образом , может быть открыта любая программа , которая может обрабатывать обычные файлы .zip.
acdcjunior
41

война - веб архив. Он используется для развертывания веб-приложений в соответствии со стандартом сервлета. Это jar-файл, содержащий специальный каталог WEB-INF и несколько файлов и каталогов внутри него (web.xml, lib, classes), а также все HTML, JSP, изображения, CSS, JavaScript и другие ресурсы веб-приложения.

ухо - архив предприятия. Он используется для развертывания корпоративного приложения, содержащего EJB, веб-приложения и сторонние библиотеки. Это также файл jar, в нем есть специальный каталог APP-INF, содержащий файл application.xml и файлы jar и war.

Дэвид Рабинович
источник
Вы имели в виду META-INF вместо каталога APP-INF?
Заваэль
26

Файлы WAR (веб-архив) содержат файлы классов сервлетов, JSP (страницы сервлетов Java), файлы HTML и графические файлы и другие вспомогательные файлы.

Файлы EAR (корпоративного архива) содержат файлы WAR вместе с файлами JAR, содержащими код.

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

paxdiablo
источник
2
В моем случае я всегда развертываю WAR с банками в папке WEB-INF / lib, и это работает. Так почему я должен использовать архив EAR?
swapyonubuntu
2
@swapyonubuntu, если вы просто развертываете одно веб-приложение (точнее, один контекст сервлета), нет ничего плохого в том, чтобы просто делать файлы WAR. Файлы EAR намного лучше для полноценных корпоративных приложений, в том числе со многими веб-приложениями.
paxdiablo
1
В эту эпоху микросервисов, не имеет ли больше смысла хранить каждую WAR полностью раздельно и развертывать отдельно, а не объединять их в монолитный EAR?
Сайо Оладеджи,
18

JAR-файлы

Файл JAR (сокращение от Java Archive) позволяет объединять несколько файлов в один. Файлы с «.jar»; расширения используются разработчиками программного обеспечения для распространения классов Java и различных метаданных. Они также содержат библиотеки и файлы ресурсов, а также вспомогательные файлы (такие как файлы свойств).

Пользователи могут извлекать и создавать файлы JAR с помощью команды «.jar» Java Development Kit (JDK). ZIP инструменты также могут быть использованы.

JAR-файлы имеют дополнительные файлы манифеста. Записи в файле манифеста предписывают использование файла JAR. Спецификация «основного» класса для класса файлов обозначает файл как отдельную или «автономную» программу.

Файлы WAR

Файлы WAR (или архива веб-приложения) могут содержать файлы XML (расширяемый язык разметки), классы Java, а также страницы сервера Java для целей Интернет-приложения. Он также используется для маркировки библиотек и веб-страниц, которые составляют веб-приложение. Файлы с расширением .war содержат веб-приложение для использования с серверами или контейнерами JSP (Java Server Page). Он содержит JSP, HTML (язык гипертекстовой разметки), JavaScript и различные файлы для создания вышеупомянутых веб-приложений.

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

EAR-файлы

Файл EAR (Enterprise Archive) объединяет файлы JAR и WAR в один архив. Эти файлы с расширением .ear имеют каталог для метаданных. Модули упакованы в архив для бесперебойной и одновременной работы различных модулей на сервере приложений.

Файл EAR также содержит дескрипторы развертывания (которые являются файлами XML), которые эффективно определяют развертывание различных модулей.

введите описание изображения здесь

Джоби Уилсон Мэтьюз
источник
1
должен быть топ ответ только за отличную графику, спасибо, отличная помощь!
fl0w
12

См. Http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html.

tar (ленточные архивы) - используемый формат - это файл, записанный в последовательных единицах fileName, fileSize, fileData - без сжатия. может быть огромным

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

war (архивы веб-приложений) - подобные jar-файлы имеют только определенную структуру каталогов согласно спецификации JSP / Servlet для целей развертывания

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

simpleDev
источник
6

Ear-файлы предоставляют больше возможностей для настройки взаимодействия с сервером приложений.

Например: если гибернационная версия сервера приложений старше, чем версия, предоставляемая вашими зависимостями, вы можете добавить следующее в ear-deployer-jboss-beans.xml для JBOSS, чтобы изолировать загрузчики классов и избежать конфликтов:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer">    
  <property name="isolated">true</property>
</bean>

или в src / main / application / META-INF / jboss-app.xml:

<?xml version="1.0"?>
<jboss-app>
<loader-repository>
    loader=nameofyourear.ear
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</jboss-app> 

Это обеспечит отсутствие конфликта загрузчика классов между вашим приложением и сервером приложений.

Обычно механизм загрузчика классов работает так:

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

Изолируя загрузчики классов, ваш ушной загрузчик классов не будет выглядеть в родительском (= JBoss / другой AS загрузчик классов). Насколько я знаю, это невозможно с военными файлами.

отметка
источник
KNU: такое использование файла ear более допустимо, чем просто его использование, поскольку «оно содержит файлы классов Servlet, файлы JSP, файлы поддержки, файлы GIF и HTML», как указано в принятом ответе. Так как военные файлы также могут содержать gif, html, jsp, servlets, ... Если бы каждый "ответил на все вопросы", возможно, мы все могли бы стать мудрее в данном вопросе.
Марк
Мэйвен делает это для тебя нет? Вы можете указать зависимости для каждой версии, и они будут включены в папку / lib. (в военном деле)
Себас
Да, но контейнер сервера приложений / сервлетов может переопределить их в папке lib с помощью библиотек, которые он предоставляет в своей собственной папке lib. Это может предотвратить это. Все зависит от используемого механизма загрузки классов.
Марк
6

J2EE определяет три типа архивов:

  1. Архивы Java (JAR) Файл JAR содержит один или несколько классов Java, манифест и дескриптор. JAR-файлы - самый низкий уровень архива. JAR-файлы используются в J2EE для упаковки EJB-компонентов и клиентских Java-приложений.

  2. Файлы WAR веб-архивов (WAR) аналогичны файлам JAR, за исключением того, что они предназначены специально для веб-приложений, созданных из сервлетов, JSP и поддерживающих классов.

  3. Корпоративные архивы (EAR) »Файл EAR содержит все компоненты, которые составляют конкретное приложение J2EE.

user1884500
источник
0

Для переноса проекта развертывание стало проще. нужно сжать в один файл. JAR (архив Java) группа файлов .class

WAR (веб-архив) - каждая война представляет одно веб-приложение - используйте только веб-технологии, такие как сервлет, можно использовать jsps. - может работать на сервере Tomcat - веб-приложение, разработанное только с использованием веб-технологий. jsp servlet html js - только представление информации без транзакций.

EAR (корпоративный архив) - каждое ухо представляет одно корпоративное приложение - мы можем использовать все, что угодно, от j2ee, например, ejb, с радостью можно использовать jms. - может работать на сервере Glassfish, а не на сервере Tomcat. - корпоративное приложение, разработанное с помощью любой технологии, от j2ee, как все веб-приложения, ejbs, jms и т. д., - выполняет транзакции с представлением информации. например. Банк приложение, приложение Телеком

Ашиш Камбл
источник