содержание   вперед   назад

8. Делаем архив программы

Итак, я надеюсь, что вам удалось успешно прокомпилировать программу и посмотреть ее в работе. Лично у меня все получилось хорошо, хотя если честно, по ходу пришлось исправлять ошибки. Но к вам текст попал уже без ошибок. Как исправлять ошибки. Это достаточно очевидная процедура. Компилятор очень хорошо комментирует ошибки и показывает места, где он их зафиксировал. Есть ошибки грамматики, но есть и runtime ошибки, то есть, например, забыли записать файл First.ini, а программе надо его читать. Такие ошибки понятны и легко исправимы. О более сложных ошибках пока говорить не будем. Пока вы со мной, вам это не грозит.

В чем неудобство созданной программы. Она имеет много файлов с расширением class. Точнее у нас приемлемо, а может быть очень много, тысячи. И в разных папках. Как быть? Создатели Java придумали такое решение: в качестве базового архиватора выбран zip. Java программы упаковываются в zip архив, который называется jar-файл, что может означать JavaARchive. Файл с расширением jar может прямо запускаться интерпретатором, то есть по клику на иконке, но при условии, что внутри него находится стандартная папка с названием META-INF, и в этой папке, как минимум, находится файл с названием MANIFEST.MF, а в этом файле, как минимум, такое содержание

И все. То есть jar-файл - это переименованный zip-файл с кодом Java программы, но для запуска программы в нем должен быть указанный выше файл в указанной папке. В этом zip-файле можно записать все классы, причем в том порядке папок (пакетов), как было на диске. После этого файл становится полноценной программой, которую можно запускать либо простым кликом, либо через bat-файл. Запуск простым кликом неудобен тем, что в этом случае нет окна терминала и диагностика никуда не выводится, если вы не обрабатывали ошибки нужным образом. Но если вы специально позаботились о показе диагностики в каком либо окне программы, то все нормально. В противном случае лучше использовать bat-файл, имеющий следующие строки

Этот файл можно назвать runj.bat. Вообще то говоря, для создания jar файлов в SDK есть специальная программа jar.exe. Можно с ней работать. Но я лично действую по другому, а именно,

включаю Windows Commander,
открываю First.zip файл, например, просто копирую какой-нибудь имеющийся zip-файл с другим именем и вычищаю все файлы кроме папки META-INF.
в файле MANIFEST.MF исправляю имя главного класса в третьей строке, именно эта информация самая главная
добавляю все нужные классы
переименовываю файл командой ren First.zip First.jar

Последнюю команду можно записать в файл с именем renZJ.bat. Если необходимо внести исправления, то просто используем обратную команду ren First.jar First.zip в файле с именем renJZ.bat и дальше, как выше. Непосредственно jar-файл Windows Commander не открывает, так как он запускает программу на исполнение. Поэтому нужны такие хитрости. Писать более сложные манифесты я пока не пробовал и не вижу в этом необходимости.

Одно замечание. Наша программа написана так, что мы можем архивировать только class-файлы, полученные при компиляции. Однако все внешние файлы, которые читает программа, должны находиться в той же папке, что и jar-файл, иначе будет ошибка. Существует однако способ написать код таким образом, что программа будет читать файлы из собственного архива, то есть все внешние файлы, которые она использует без изменений тоже можно записать в архив. Но для этого надо использовать другой способ считывания файлов. Об этом будет позже.

Теперь я опишу как можно было бы использовать среду разработки BlueJ для написания нашей программы. Я сам до сих пор использую относительно старую версию 2.5.0, но те простые действия, которые я хочу описать наверняка работают во всех версиях без изменений. Итак, после того, как скачали дистрибутив программы и установили ее, запускаем в работу. У меня уже был какой-то проект и он сразу открылся. Но нам нужен новый проект. Выбираем меню Project / New Project, указываем имя папки (First), в которой мы хотим работать. У меня все проекты открываются в папке [ _myappl ] внутри папки самой программы BlueJ. Открывается новое окно с новым проектом. Старое окно можно закрыть.

Начинаем работу. Кликаем кнопку [New Class...], указываем тип класса и его имя. Появляется иконка класса. Ставим на нее курсор мыши и нажимаем правую кнопку. Открывается меню, выбираем [Open Editor]. Открывается новое окно с редактором текста, в котором уже что-то набито, это все можно редактировать. Так как у нас уже есть полный текст класса в файле First.java, то можно уничтожить все, что было, и скопировать наш текст. Текст появляется в редакторе с подсветкой синтаксиса, но лично мне редактор Notepad2 больше нравится, хотя возможно я просто не занимался настройками. Самое интересное, что редактор имеет кнопку компиляции и можно сразу попытаться откомпилировать файл. Он покажет на несуществующие классы, в первую очередь MyPro. Тогда заходим в окно главного проекта, снова кликаем кнопку [New Class...], указываем тип класса и его имя MyPro. Затем копируем в редактор текст класса и снова пытаемся его откомпилировать. На этот раз все удачно. Возвращаемся в редактор First и пытаемся его откомпилировать снова. Получаем новую ошибку: нет класса runPro. Делаем класс runPro по той же методике. Этот класс также не компилируется так так не видит класс MainForm. Однако, если вернуться в главное окно проекта и нажать там кнопку [Compile], то компиляция проходит успешно.

Теперь полезно заглянуть в папку [First] которую мы открывали. Там уже полно файлов. Добавим туда файлы, которые читает наша программа, то есть First.ini, icon.png и sky.gif. Затем возвращаемся в проект, ставим курсор мыши на иконку First, нажимаем правую кнопку и выбираем в меню [void main(String[] args]. Это главная функция программы. По этой кнопке программа запускается на счет и на экране появляется окно программы. Убедившись, что все нормально, Выбираем в меню Project / Create Jar File. В появившемся окне надо указать на головной класс и после этого название и место куда записать jar-файл. Как видим все очень просто, пока простая программа. Однако среда разработки иногда может помочь, если программа пишется с нуля и есть проблемы и ошибки. С другой стороны ее надо скачивать, устанавливать и разбираться как она работает. Ну и естественно, она записывает много лишних (своих служебных) файлов.

содержание   вперед   назад


.