среда, 13 апреля 2011 г.

Архивы JAVA

JAR( Java ARchive) -- зип-архив ява приложения. Внутри находятся директория-пакеты с откомпилированными классами и обязательно среди них класс со статическим методом мейн. Когда запаковывается приложение, в архиве рядом с дирекориями пакетов появляется еще одна META-INF. Эта директория содержит файл MANIFEST.MF, в нем указывается какой класс и из какого пакета содержит метод мейн(так запускает архив виртуальная машина, она по манифесту находит какой класс запустить). Также в манифесте содержися другая мета-информация. Пример манифеста:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_22-b04 (Sun Microsystems Inc.)
Main-Class: jettytest.AddressBook
Class-Path: lib/jetty-6.1.22.jar lib/jetty-util-6.1.22.jar lib/servlet-api-2.5.jar lib/xstream.jar
X-COMMENT: Main-Class will be added automatically by build



Стоит отметить, что директория lib, чтобы приложение могло обращаться за пакеами библиотек, прописанных в Class-Path, должна находися на одном уровне с архивом приложения.
Также в архиве могут находится картинки, текстовые файлы, аудио и другие ресурсы необходимые для приложения.

WAR (Web Application aRchive) - это тоже зип-архив, но это веб-ява-приложение. Содрежит внури XML файлы, Java классы, JavaServer Pages, Servlets, стили, яваскрипты, картинки и другие файлы необходимые для веб-приложения. Внутри архив содержит следующую сруктуру: обязательно директория WEB-INFO, рядом могут находится файлы ресурсов(хтмл страницы, стили, скрипты, jsp), также может находиться директория META-INF, но ее манифест не важен для вебприложения и вроде как эту директорию вообще можно удалить.
Что не скажешь про директорию WEB-INFO, она внутри содержит дескриптор приложения web.xml, который подсказывает контейнеру сервлетов, как нужно разворачивать приложения. Если единственные сервлеты в приложении это jsp страницы, то внури этого дескриптора не будет никакой полезной информации. В более сложном приложении десриптор описывает сервлеты, путь к ним, и какой ури данный сервлет будет обслуживать. Также определяются фильтра, которые привязываются к определенному ури(или наверно сервлету); фильра могут изменять обьекты реквест/респонс.
Внутри WEB-INFO кроме дескриптора может находиться директория classes, в которой обитают классы реализовывающие интерфейс сервлет(на них деспритор делает ссылки по конкретным ури), также другие классы использующиеся сервлетами. Этот уровень называется дефолтовым пакетом, рядом с классами мугут быть директории, которые содержат в себе другие пакеты(недефолтовые), на эти пакеты обычно ссылаются классы с дефолтового пакета.
Эще рядом с директорией classes может находится дирекория lib, в ней находятся jar-архивы библиотек, класс-лоудер в своем класспазе кроме пути к пакетам из classes, содержит пути к этим архивам. По необходимоси если какой-то класс импортирует пакет из этих архивов класс-лоудер его подгружает, потому что знает к нему путь по своему класспазу.

RAR (Resource Adapter aRchive) -- (не путать RAR file format), также ява-арихив, содержит XML файлы, Java classes и другие обьекты для J2EE Connector Architecture (JCA) applications (архитектура которая соединяет application server и enterprise information system, последнее это более уницицированное понятие чем к примеру база данных - это комплексная база, к примеру датацентра, туда могут входить различные базы данных, просто файлы на дисках и т.д. JCA это часть enterprise application integration (EAI) решения).

EAR (Enterprise ARchive) -- эти файлы предоставляют композитные Java-архивы. Внури модули приложение, среди которых XML files, Java classes и другие обьекты, включая JAR, WAR and RAR Java-архивы для Enterprise Applications.
Под jar-архивами могут находиться как и POJO-классы(Plain Old Java Object), так и ejb-бины.
Этот архив предоcтавляет возможность задеплоить несколько модулей одновременно. Среди модулей обязательно будет находиться директория META-INF и внутри будет дескпритор развертывания application.xml. Рядом с этим дескриптором могут быть другие характерные под контектную реализацию application server, они помогают развернуть приложение в контектном сервере.
Структура application.xml:
  • icon, опеределяет путь к картинкам которые представляют приложение(small-icon и large-icon).
  • display-name, идентифицирует приложение.
  • Модуль элемент для каждого модуля в архиве.
  • Ноль и более security-role элементов для the global security roles in the application.
Модули из одного архива будут взаимодоступны друг другу. Апликейшин сервер реализует классовую изоляцию между модулями из разных EAR. Но jBoss традиционно не предоставлял такую изоляцию, и сейчас для обратной совместимости он предоставляет возможность в настройках влючать/выключать классовую изоляцию. Классовая изоляция позволяет работать в одном сервере разным версиям приложения.

SAR (Service ARchive) подобный EAR. Он предоставляет service.xml файл и связанные с ним JAR файлы.

APK (Android Application PacKage), вариант Java archive формата, используется для Android applications.

Комментариев нет:

Отправить комментарий