Как создать JAR файл
Для удобства распространения приложения, в Java существует такой механизм как JAR (Java Archive) файлы. JAR-файлы используются для архивации и сжатия данных.
Базовый формат команды для создания JAR-файла такой:
jar -cf jar-файл входной-файл(ы) Сгенерированный JAR-файл будет помещен в текущий каталог.
Рассмотрим ключи и аргументы, использованные в этой команде:
- Ключ
cпоказывает, что необходимо создать (create) JAR-файл. - Ключ
fпоказывает, что необходимо направить вывод в файл, а не в стандартный поток вывода. jar-файл- это имя, которое необходимо дать результирующему JAR-файлу. Вы можете использовать любое имя для JAR-файл. По соглашению, имени JAR-файла дается расширение .jar, хотя это и необязательно.- Аргумент
входной-файл(ы)- список, разделенный пробелами из одного или более файлов, которые вы хотите поместить в ваш JAR-файл. Аргументвходной-файл(ы)может содержать также символ-джокер (wildcard) *. Если любые из входных файлов являются каталогами, содержимое этих каталогов рекурсивно добавляется в архив JAR.
Правила относительно структуры JAR-файла.
- Команда
jarавтоматически создаст META-INF каталог. - Команда
jarавтоматически создаст MANIFEST.MF и поместит его в META-INF каталог. - Сохраняется точная структура каталогов.
- Команды
javaиjavacмогут использовать JAR-файл как нормальное дерево каталогов. - Поиск JAR-файлов с помощью ключа
-cpаналогичен поиску пакетных файлов. Единственная разница - путь к JAR-файлу должен содержать имя JAR-файла (например classes/project1.jar).
Рассмотрим на примере как создаются и используются JAR файлы.
Допустим, что наше приложение имеет следующую структуру каталогов:

Создадим JAR-файл project1.jar, который будет содержать пакеты first и second:
cd project1/classes
jar –cf project1.jar first second Можем просмотреть содержимое project1.jar файла с помощью следующей команды:
jar -tf project1.jar Результат выполнения будет приблизительно такой:
META-INF/
META-INF/MANIFEST.MF
first/
first/Example1.class
second/
second/Example2.class Перенесем созданный project1.jar файл в каталог lib и запустим на выполнение программу first.Example:
cd lib
java -cp project1.jar first.Example1 Запуск JAR одной командой: java -jar
Если в манифесте указать главный класс, JAR можно запускать без -cp и без имени класса — командой java -jar project1.jar. Для этого при создании архива добавляют ключ e (entry point): jar -cfe project1.jar first.Example1 first second. Команда jar запишет строку Main-Class: first.Example1 в META-INF/MANIFEST.MF, и JVM будет знать, какой класс запускать.
Часто задаваемые вопросы
Что такое JAR-файл в Java?
JAR (Java Archive) — это архив на основе формата ZIP, в который упаковывают скомпилированные классы (.class), ресурсы и манифест. Он нужен для удобного распространения и запуска Java-приложения как единого файла.
Как создать JAR-файл из командной строки?
Базовая команда — jar -cf имя.jar входные-файлы. Ключ c означает create (создать), ключ f — направить вывод в файл. Например: jar -cf project1.jar first second упакует пакеты first и second.
Что такое MANIFEST.MF и кто его создаёт?
Это служебный файл с метаданными архива, который лежит в каталоге META-INF. При создании JAR команда jar формирует каталог META-INF и файл MANIFEST.MF автоматически — вручную их создавать не нужно.
Как посмотреть содержимое JAR без распаковки?
Используйте команду jar -tf имя.jar. Ключ t выводит оглавление (table of contents) архива — список всех файлов и каталогов внутри JAR, не распаковывая его.
Как запустить класс из JAR-файла?
Можно добавить JAR в classpath и указать класс: java -cp project1.jar first.Example1. Если в манифесте задан Main-Class, достаточно команды java -jar project1.jar — без -cp и имени класса.
Презентацию с видео можно скачать на Patreon.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии