Java: Настройка окружения
Теория: JAR файлы
У любого компилируемого приложения есть два состояния. Первое – исходный код для разработки. Второе – скомпилированная программа, готовая для запуска. Причем программа запускается не там где она компилируется, ее сначала нужно доставить либо на сервер, либо на компьютер тому, кто ее запустит.
Компиляция => Доставка по месту назначения => Запуск
Доставлять программу куда-либо удобно только если она состоит из одного файла. Поэтому создатели 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 можно запускать напрямую, поэтому сразу проверим как работает наша программа:


