Что такое war файл

Обновлено: 04.07.2024

Во-первых, мы определим каждый вариант упаковки отдельно. После мы резюмируем их различия.

2. Упаковка JAR

Проще говоря, JAR - или Java Archive - это формат файла пакета. Файлы JAR имеют расширение .jar и могут содержать библиотеки, ресурсы и файлы метаданных.

По сути, это заархивированный файл, содержащий сжатые версии файлов .class и ресурсы скомпилированных библиотек и приложений Java.

Например, вот простая файловая структура JAR:

/ MANIFEST.MF META-INF - файл может содержать дополнительные метаданные о файлах , хранящихся в архиве.

Мы можем создать файл JAR с помощью команды jar или таких инструментов, как Maven.

3. Упаковка WAR

WAR означает архив веб-приложений или ресурс веб-приложения. Эти архивные файлы имеют расширение .war и используются для упаковки веб-приложений, которые мы можем развернуть в любом контейнере сервлетов / JSP.

Вот пример макета типичной файловой структуры WAR:

Внутри у него есть каталог META-INF, содержащий полезную информацию о веб-архиве в MANIFEST.MF . META-INF каталог является частным и не могут быть доступны извне.

С другой стороны, он также содержит общедоступный каталог WEB-INF со всеми статическими веб-ресурсами, включая HTML-страницы, изображения и JS-файлы. Кроме того, он содержит файл web.xml , классы сервлетов и библиотеки.

Мы можем использовать те же инструменты и команды, которые использовали для создания JAR- архива .war .

4. Ключевые различия

Итак, каковы основные различия между этими двумя типами архивов?

Первое и наиболее очевидное отличие - это расширение файла . Файлы JAR имеют расширение .jar , а файл WAR - расширение .war .

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

Структура архивов также отличается. Мы можем создать JAR с любой желаемой структурой. Напротив, WAR имеет предопределенную структуру с каталогами WEB-INF и META-INF .

Наконец, мы можем запустить JAR из командной строки, если мы создадим его как исполняемый JAR без использования дополнительного программного обеспечения. Или мы можем использовать его как библиотеку. Напротив, нам нужен сервер для выполнения WAR .

5. Заключение

В этой быстрой статье мы сравнили типы упаковки Java .jar и .war . При этом мы также отметили, что, хотя оба используют один и тот же формат файла ZIP, есть несколько важных отличий.

встроенные Java-сервер-300x229-

Однако есть еще одна школа мысли, которая полностью переворачивает эту модель с ног на голову. При таком подходе приложения Java упаковываются для выполнения из командной строки, как любое обычное приложение. Вместо того, чтобы развертываться в контейнере, встроенный контейнер развертывается внутри самого приложения!

Это паритет для курса со многими языками. Среда Django для Python включает в себя встроенный сервер для разработки и тестирования, а Ruby on Rails поставляется со встроенным сервером, который также используется в производстве. Эта концепция уже давно существует в Java, и Jetty специализируется на встраиваемой нише. Однако это далеко от нормы, и стандарт де-факто по-прежнему является файлом WAR, который можно развернуть в Tomcat .

Его сессия была посвящена платформе Play для Java и Scala, которая встраивает Netty аналогично серверу Rails. В отличие от Grails , в котором для разработки используется сервер в стиле Django, а затем он поставляется в виде файла WAR, Play предназначен для использования своего собственного сервера вплоть до производства. Джеймс защищал этот подход во всех приложениях Java.

Встроенное приключение


Я сделал хотя бы глоток Kool-Aid. Когда я начал писать свою книгу, Hibernate Search by Example , я хотел сосредоточиться на Hibernate Search, а не на каких-либо других фреймворках или проблемах с сервером. Поэтому я отказался от Spring и написал пример приложения для книги, используя подход Vanilla Servlet 3.0.

Использование встроенного сервера с Maven

Однако вам нужно взломать файл Jetty JAR, чтобы получить правильную копию этого файла конфигурации. Во-первых, вам нужно покопаться в вашем локальном репозитории Maven и выяснить, какой JAR-файл взломать (оказывается, это jetty-webapp, а не jetty-server). После того, как вы получите копию файла webdefault.xml и переключите параметр useFileMappedBuffer, вам нужно сохранить свою копию где-нибудь в вашем проекте и обновить POM Maven, чтобы он смотрел там, а не внутри Jetty JAR:

< defaultsDescriptor >$/src/main/webapp/WEB-INF/webdefault.xml</ defaultsDescriptor >

Использование встроенного сервера с другими системами сборки

Я знаю, что многие Java-разработчики ненавидят Maven. Поэтому я хотел предоставить версию примера приложения моей книги, созданного с использованием Ant, чтобы проиллюстрировать, как можно адаптировать концепции по умолчанию. Итак, какую строку мне добавить в build.xml, чтобы Ant использовал Jetty?

муравей

Эх, не так быстро. Есть интеграция с Ant для Jetty , но она еще более громоздка, чем Maven. Даже если вы используете систему управления зависимостями, такую ​​как Ivy, ваш Ant-скрипт не сможет загрузить и управлять встроенным сервером за вас. Вместо этого вы должны загрузить полностью автономный сервер Jetty и вручную скопировать его в свой проект. Кто не хочет, чтобы 6 мегабайт исполняемых файлов были переданы в систему контроля версий?

JAR-файлы Jetty-сервера, вам нужно вручную добавить еще один JAR-файл для интеграции с Ant. К моему удивлению, я обнаружил, что самой последней поддерживаемой версией была Jetty 7, реализующая спецификацию Servlet 2.5, которой почти восемь лет .

Я вижу, что они наконец добавили Jetty 8 в прошлом месяце, но это не помогло мне, когда я писал книгу прошлой осенью. Мне пришлось переписать эту версию моего примера приложения для Servlet 2.5 вместо 3.0, и я начал задаваться вопросом, действительно ли это того стоило.

Использование встроенного сервера из кода

В последней главе моей книги рассказывается о приложениях Hibernate Search, работающих в среде кластерного сервера. Плагин Maven предназначен только для одного экземпляра, поэтому я решил написать небольшой класс начальной загрузки, который бы программно запускал два экземпляра Jetty на разных портах. Структурируя этот класс как тест JUnit, я мог бы заставить Maven запускать его автоматически следующим образом:

Эх, не так быстро. Сервлеты, слушатели и службы RESTful моего приложения не регистрировались при запуске. После гораздо больше времени, потраченного на исследования, я обнаружил, что в Jetty доступны разные «разновидности» , с функциями Servlet 3.0 (такими как аннотации), включенными или отключенными по умолчанию.

Честно говоря, я до сих пор не совсем понимаю, как определить разницу между «высоким» и «не высоким». Все, что я могу вам сказать, это то, что мне пришлось добавить этот кусок кода в мой класс начальной загрузки, чтобы аннотации работали:

Намного проще и понятнее, чем сбросить файл WAR в папку Tomcat / webapps, верно?

Использование встроенного сервера из консоли и облака

Закончив книгу, я хотел, чтобы демо-версия примера кода была отправлена ​​на GitHub и развернута на Heroku . Теоретически, Heroku может запустить любое приложение, которое вы можете запустить локально из командной строки. Если Heroku обнаружит POM Maven, он запустит пакет mvn clean и выполнит любую команду запуска, которую вы поместили в скрипт с именем Procfile.

Мой программный лаунчер Jetty работал нормально в контексте запуска Maven. Однако Maven управлял моими зависимостями classpath во время тестирования, и теперь мне нужна Jetty без этой помощи. Рекомендуемый подход Heroku, используемый в их демонстрационных Java-приложениях , заключается в комплектации вашего приложения версией Tomcat с одним файлом. Круто, я все равно больше знаком с Tomcat!


Не беспокойтесь, потому что есть похожий однофайловый Jetty Runner , и он позволяет передавать параметры JNDI в качестве параметров командной строки. Кроме того, мы потратили много времени на решение всех проблем со встроенной Jetty!

  1. JAR-файл Jetty Runner
  2. Файл WAR вашего веб-приложения (*)
  3. Разобранная версия вашего WAR-файла, созданного во время сборки Maven

(*) Вы правильно прочитали. После всего этого встроенного кошмара Heroku все еще использует файл WAR .

Мой профиль Heroku в итоге выглядел так:

web: java $JAVA_OPTS -jar target /dependency/jetty-runner-8 .1.7.v20120910.jar --lib target /hibernate-search-demo-0 .0.1-SNAPSHOT /WEB-INF/lib --port $PORT --jdbc org.apache.commons.dbcp.BasicDataSource "url=jdbc:h2:mem:vaporware;DB_CLOSE_DELAY=-1" "jdbc/vaporwareDB" target/*.war

Здесь работает более одного загрузчика классов, и это позволяет Jetty Runner загружать материал JSTL / taglib из его пути к классам, а не к пути к классам веб-приложения.

Вывод

Нет ничего плохого в концепции встроенного сервера, когда он изначально встроен в среду. Написание приложений Play доставляет удовольствие, и их развертывание на Heroku практически тривиально. На своей повседневной работе я использую коммерческий пакет на основе Spring под названием hybris , чья обширная система сборки включает сервер Tomcat в ваше приложение. Пока вам не нужно слишком сильно настраивать сценарии сборки, это прекрасно работает.

  1. Загрузите Tomcat и разархивируйте его куда-нибудь
  2. Перенесите файл WAR в подкаталог Tomcat / webapps
  3. Запустить Tomcat

Единственным реальным преимуществом, которое я получил, была возможность запустить демонстрацию на Heroku. Однако поддержка Java от облачных провайдеров улучшается с каждым днем. Jelastic позволяет вам развернуть обычные WAR-файлы в Tomcat 7 или GlassFish 3 прямо сейчас. AppFog поддерживает развертывание в Tomcat 6 , а поддержка Tomcat 7 появится в ближайшее время. Я подозреваю, что в недалеком будущем идея модификации ваших приложений для облачного развертывания будет воспринята как анахронизм.

Таким образом, в двух словах, это зависит от используемой вами платформы. Если встроенные серверы запекаются, они могут быть очень крутыми. Если они приклеены к воздуховоду, они могут быть ужасными. Если бы сегодня я писал Hibernate Search by Example , сценарии построения примера приложения производили бы две вещи: файл WAR и ссылку для загрузки Tomcat.

В программной инженерии , WAR файл ( W ЕВА A РИМЕНЕНИЯ R esource или W Eb приложение AR Chive) представляет собой файл , используемый для распространения коллекции JAR -Files, JavaServer Pages , Java сервлеты , Java классы , XML - файлы, библиотек тегов, статической веб-страницы ( HTML и связанные файлы) и другие ресурсы, которые вместе составляют веб-приложение .

Содержание

Содержание и структура

Файл WAR может иметь цифровую подпись так же, как файл JAR , чтобы другие могли определить, откуда пришел исходный код.

В файле WAR есть специальные файлы и каталоги:

  • Каталог / WEB-INF в файле WAR содержит файл с именем web.xml, который определяет структуру веб-приложения. Если веб-приложение обслуживает только файлы JSP, файл web.xml не является строго необходимым. Если использует веб - приложений сервлеты, то сервлет контейнер использует web.xml , чтобы определить , в котором сервлетURL запрос будет направлен. Файл web.xml также используется для определения переменных контекста, на которые можно ссылаться в сервлетах, и он используется для определения зависимостей среды, которые, как ожидается, установит разработчик. Примером этого является зависимость от почтового сеанса, используемого для отправки электронной почты. За предоставление этой услуги отвечает контейнер сервлета.

Преимущества файлов WAR

  • Простое тестирование и развертывание веб-приложений
  • Легкое определение версии развернутого приложения
  • Все контейнеры Java EE поддерживают файлы WAR.
  • Структура MVC поддерживает файлы WAR.

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

Недостатки файлов WAR

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

пример

Следующий пример файла web.xml демонстрирует объявление и ассоциацию сервлета :

/WEB-INF/classes Каталог на ClassLoader «s классов . (Путь к классам состоит из списка мест, из которых .class файлы могут быть загружены и выполнены JVM.) /WEB-INF/classes Каталог содержит классы, связанные с самим веб-приложением.

Любые файлы JAR, помещенные в /WEB-INF/lib каталог, также будут помещены в путь к классам ClassLoader.

Программы, которые поддерживают WAR расширение файла

Ниже вы найдете указатель программ, которые можно использовать для открытия файлов WAR, разделенных на категории 3 в соответствии с поддерживаемой системной платформой. Файлы с расширением WAR, как и любые другие форматы файлов, можно найти в любой операционной системе. Указанные файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут быть способны правильно обрабатывать такие файлы.

Программы, обслуживающие файл WAR

Как открыть файл WAR?

Отсутствие возможности открывать файлы с расширением WAR может иметь различное происхождение. К счастью, наиболее распространенные проблемы с файлами WAR могут быть решены без глубоких знаний в области ИТ, а главное, за считанные минуты. Ниже приведен список рекомендаций, которые помогут вам выявить и решить проблемы, связанные с файлами.

Шаг 1. Скачайте и установите WinRAR

Install software to open WAR file

Проблемы с открытием и работой с файлами WAR, скорее всего, связаны с отсутствием надлежащего программного обеспечения, совместимого с файлами WAR на вашем компьютере. Этот легкий. Выберите WinRAR или одну из рекомендованных программ (например, ALZip, IZArc, WinZip) и загрузите ее из соответствующего источника и установите в своей системе. Выше вы найдете полный список программ, которые поддерживают WAR файлы, классифицированные в соответствии с системными платформами, для которых они доступны. Одним из наиболее безопасных способов загрузки программного обеспечения является использование ссылок официальных дистрибьюторов. Посетите сайт WinRAR и загрузите установщик.

Шаг 2. Проверьте версию WinRAR и обновите при необходимости

Update software that support file extension WAR

Вы по-прежнему не можете получить доступ к файлам WAR, хотя WinRAR установлен в вашей системе? Убедитесь, что программное обеспечение обновлено. Иногда разработчики программного обеспечения вводят новые форматы вместо уже поддерживаемых вместе с новыми версиями своих приложений. Это может быть одной из причин, по которой WAR файлы не совместимы с WinRAR. Самая последняя версия WinRAR обратно совместима и может работать с форматами файлов, поддерживаемыми более старыми версиями программного обеспечения.

Шаг 3. Настройте приложение по умолчанию для открытия WAR файлов на WinRAR

Если проблема не была решена на предыдущем шаге, вам следует связать WAR файлы с последней версией WinRAR, установленной на вашем устройстве. Следующий шаг не должен создавать проблем. Процедура проста и в значительной степени не зависит от системы

Associate software with WAR file on Windows

Выбор приложения первого выбора в Windows

  • Выберите пункт Открыть с помощью в меню «Файл», к которому можно щелкнуть правой кнопкой мыши файл WAR.
  • Далее выберите опцию Выбрать другое приложение а затем с помощью Еще приложения откройте список доступных приложений.
  • Наконец, выберите Найти другое приложение на этом. , укажите папку, в которой установлен WinRAR, установите флажок Всегда использовать это приложение для открытия WAR файлы свой выбор, нажав кнопку ОК

Выбор приложения первого выбора в Mac OS

Шаг 4. Убедитесь, что WAR не неисправен

Если проблема по-прежнему возникает после выполнения шагов 1-3, проверьте, является ли файл WAR действительным. Проблемы с открытием файла могут возникнуть по разным причинам.

Check WAR file for viruses

1. Проверьте WAR файл на наличие вирусов или вредоносных программ.

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

2. Убедитесь, что структура файла WAR не повреждена
3. Убедитесь, что у вас есть соответствующие права доступа

Некоторые файлы требуют повышенных прав доступа для их открытия. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.

4. Убедитесь, что ваше устройство соответствует требованиям для возможности открытия WinRAR

Если в системе недостаточно ресурсов для открытия файлов WAR, попробуйте закрыть все запущенные в данный момент приложения и повторите попытку.

5. Проверьте, есть ли у вас последние обновления операционной системы и драйверов

Современная система и драйверы не только делают ваш компьютер более безопасным, но также могут решить проблемы с файлом Java Web Archive. Устаревшие драйверы или программное обеспечение могли привести к невозможности использования периферийного устройства, необходимого для обработки файлов WAR.

Вы хотите помочь?

Если у Вас есть дополнительная информация о расширение файла WAR мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле WAR.

Читайте также: