Файл .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 (корпоративный архив) и развернуты на сервере приложений.


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, код, коннекторы и др.).


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


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.


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.