Jar что это? - коротко
JAR — это архивный файл в формате ZIP, содержащий скомпилированные классы Java и необходимые метаданные, позволяющий запускать приложение как единый модуль. Он упрощает распространение и установку Java‑программ.
Jar что это? - развернуто
JAR — это архивный файл, созданный специально для среды Java. Он объединяет в едином контейнере скомпилированные классы, ресурсы (изображения, файлы конфигурации, т.п.) и метаданные, позволяя распространять приложение или библиотеку как единое целое.
Файл JAR имеет структуру, аналогичную ZIP‑архиву, но дополнительно содержит файл MANIFEST.MF. Этот манифест хранит сведения о версии архива, точке входа (полном имени класса с методом main) и параметрах, необходимых для корректного запуска. Благодаря манифесту JAR может работать как исполняемый файл: двойной клик по нему или запуск через команду java -jar имя.jar
приведёт к выполнению указанного класса.
Основные возможности JAR‑файлов:
- Упаковка: в один архив помещаются все зависимости, что упрощает доставку и установку программ.
- Защита: поддерживается подпись сертификатом, позволяющая проверять подлинность содержимого.
- Оптимизация: при загрузке JVM может напрямую извлекать нужные классы, не распаковывая весь архив.
- Кроссплатформенность: один JAR‑файл работает на любой системе, где установлена Java‑виртуальная машина.
Создавать JAR‑файлы можно с помощью штатного инструмента jar
, входящего в JDK. Простейший пример команды:
jar cf myapp.jar -C build/classes .
Эта команда собирает все классы из каталога build/classes
в архив myapp.jar
. Чтобы указать точку входа, добавляют манифест:
jar cfe myapp.jar com.example.Main -C build/classes .
В реальных проектах часто используют сборщики (Maven, Gradle), которые автоматически формируют JAR‑файлы, управляют зависимостями и генерируют метаданные.
JAR‑файлы применяются в самых разных сценариях: от небольших утилит и библиотек до крупных корпоративных систем. Их простота, совместимость с Java‑платформой и возможность включать подписи делают их стандартным способом упаковки и распространения Java‑программ.