HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>У любого компилируемого приложения есть два состояния. Первое - исходный код для разработки. Второе - скомпилированная программа, готовая для запуска. Причем программа запускается не там где она компилируется, ее сначала нужно доставить либо на сервер, либо на компьютер тому, кто ее запустит.</p>
1 <p>У любого компилируемого приложения есть два состояния. Первое - исходный код для разработки. Второе - скомпилированная программа, готовая для запуска. Причем программа запускается не там где она компилируется, ее сначала нужно доставить либо на сервер, либо на компьютер тому, кто ее запустит.</p>
2 <p>Компиляция =&gt; Доставка по месту назначения =&gt; Запуск</p>
2 <p>Компиляция =&gt; Доставка по месту назначения =&gt; Запуск</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