Java: Настройка окружения
2026-02-26 18:28 Diff

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

Компиляция => Доставка по месту назначения => Запуск

Доставлять программу куда-либо удобно только если она состоит из одного файла. Поэтому создатели Java разработали специальный формат архива JAR (Java ARchive). Он позволяет взять любые файлы и упаковать их в один сжатый файл. Упаковка происходит в два этапа:

Компиляция

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

Компилятор создаст директорию build и сложит туда готовые файлы. Сделает это с учетом пакетов:

Проверим что все работает:

Упаковка

Теперь упакуем содержимое директории build в jar файл. Первым шагом создадим файл манифеста manifest.MF, который нужен для правильного запуска jar на исполнение. В этом файле указывается входная точка в программу. Сам файл проще всего положить внутрь директории build иначе придется указывать classpath.

tree build build ├── io │   └── hexlet │   ├── One.class │   └── Two.class └── manifest.MF

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

Main-Class: io.hexlet.One

Следующим шагом запустим упаковку:

На выходе получился архив:

Внутри архива лежит директория io. Сейчас там только байткод (файлы с расширением class), но может быть все, что угодно, например картинки, шрифты или любые другие файлы, нужные для работы приложения.

JAR можно запускать напрямую, поэтому сразу проверим как работает наша программа: