0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>У любого компилируемого приложения есть два состояния. Первое - исходный код для разработки. Второе - скомпилированная программа, готовая для запуска. Причем программа запускается не там где она компилируется, ее сначала нужно доставить либо на сервер, либо на компьютер тому, кто ее запустит.</p>
1
<p>У любого компилируемого приложения есть два состояния. Первое - исходный код для разработки. Второе - скомпилированная программа, готовая для запуска. Причем программа запускается не там где она компилируется, ее сначала нужно доставить либо на сервер, либо на компьютер тому, кто ее запустит.</p>
2
<p>Компиляция => Доставка по месту назначения => Запуск</p>
2
<p>Компиляция => Доставка по месту назначения => Запуск</p>
3
<p>Доставлять программу куда-либо удобно только если она состоит из одного файла. Поэтому создатели Java разработали специальный формат архива JAR (Java ARchive). Он позволяет взять любые файлы и упаковать их в один сжатый файл. Упаковка происходит в два этапа:</p>
3
<p>Доставлять программу куда-либо удобно только если она состоит из одного файла. Поэтому создатели Java разработали специальный формат архива JAR (Java ARchive). Он позволяет взять любые файлы и упаковать их в один сжатый файл. Упаковка происходит в два этапа:</p>
4
<p><strong>Компиляция</strong></p>
4
<p><strong>Компиляция</strong></p>
5
<p>Сначала нужно выполнить компиляцию. Причем таким образом, чтобы готовые файлы лежали отдельно от исходного кода. Исходный код скрывается, если это не открытый проект. У компилятора есть опция -d, которая задает директорию, куда надо сложить готовые файлы.</p>
5
<p>Сначала нужно выполнить компиляцию. Причем таким образом, чтобы готовые файлы лежали отдельно от исходного кода. Исходный код скрывается, если это не открытый проект. У компилятора есть опция -d, которая задает директорию, куда надо сложить готовые файлы.</p>
6
<p>Компилятор создаст директорию<em>build</em>и сложит туда готовые файлы. Сделает это с учетом пакетов:</p>
6
<p>Компилятор создаст директорию<em>build</em>и сложит туда готовые файлы. Сделает это с учетом пакетов:</p>
7
<p>Проверим что все работает:</p>
7
<p>Проверим что все работает:</p>
8
<p><strong>Упаковка</strong></p>
8
<p><strong>Упаковка</strong></p>
9
<p>Теперь упакуем содержимое директории<em>build</em>в<em>jar</em>файл. Первым шагом создадим файл манифеста<em>manifest.MF</em>, который нужен для правильного запуска<em>jar</em>на исполнение. В этом файле указывается входная точка в программу. Сам файл проще всего положить внутрь директории<em>build</em>иначе придется указывать<em>classpath</em>.</p>
9
<p>Теперь упакуем содержимое директории<em>build</em>в<em>jar</em>файл. Первым шагом создадим файл манифеста<em>manifest.MF</em>, который нужен для правильного запуска<em>jar</em>на исполнение. В этом файле указывается входная точка в программу. Сам файл проще всего положить внутрь директории<em>build</em>иначе придется указывать<em>classpath</em>.</p>
10
<p>tree build build ├── io │ └── hexlet │ ├── One.class │ └── Two.class └── manifest.MF</p>
10
<p>tree build build ├── io │ └── hexlet │ ├── One.class │ └── Two.class └── manifest.MF</p>
11
<p>Ниже содержимое файла. Справа указывается полное имя класса включая пакет. Обратите внимание на пустую строку в конце. Если ее не добавить, то возникнет ошибка.</p>
11
<p>Ниже содержимое файла. Справа указывается полное имя класса включая пакет. Обратите внимание на пустую строку в конце. Если ее не добавить, то возникнет ошибка.</p>
12
<p>Main-Class: io.hexlet.One</p>
12
<p>Main-Class: io.hexlet.One</p>
13
<p>Следующим шагом запустим упаковку:</p>
13
<p>Следующим шагом запустим упаковку:</p>
14
<p>На выходе получился архив:</p>
14
<p>На выходе получился архив:</p>
15
<p>Внутри архива лежит директория<em>io</em>. Сейчас там только байткод (файлы с расширением<em>class</em>), но может быть все, что угодно, например картинки, шрифты или любые другие файлы, нужные для работы приложения.</p>
15
<p>Внутри архива лежит директория<em>io</em>. Сейчас там только байткод (файлы с расширением<em>class</em>), но может быть все, что угодно, например картинки, шрифты или любые другие файлы, нужные для работы приложения.</p>
16
<p>JAR можно запускать напрямую, поэтому сразу проверим как работает наша программа:</p>
16
<p>JAR можно запускать напрямую, поэтому сразу проверим как работает наша программа:</p>
17
17