[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / Java /

Самораспаковывающиеся jar-файлы

Создавайте удобные в использовании кросс-платформенные Java-архивы.

Обзор

В этой статье описан простой способ создания самораспаковывающихся Java-архивов (jar-файлов). Самораспаковывающийся архив может извлекать содержащиеся в нём файлы в выбранные пользователем каталоги на любой платформе Java. Пользователям нужна только среда выполнения Java-программ. (В оригинальной версии на английском языке 1200 слов)

Многие годы zip-архивы Фила Каца были одним из наиболее популярных форматов архивирования файлов. Компания Sun приняла формат zip как основу для Java-архивов (JAR). Sun расширила использование формата zip различными конвенциями, обеспечив возможность упаковки классов Java в архив. С дополнением файла манифеста JAR среда исполнения Java-программ может легко найти и непосредственно выполнить main-класс Java-приложения, содержащегося в jar-файле.

Некоторые zip-утилиты могут создавать самораспаковывающиеся архивы для различных платформ, например MS Windows. Такая утилита объединяет обычный zip-архиватор с программой, генерирующей новый исполняемый (exe) файл. Получатели exe-файла должны просто запустить его, чтобы извлечь содержимое zip-архива. Исполняемый файл запускает распаковщик для извлечения файлов из архива в указанный пользователем каталог вывода.

Вы можете преобразовать обычный zip- или jar-файл в исполняемый jar-файл на любой платформе, поддерживающей Java. Тогда как самораспаковывающийся zip-файл может быть преобразован в исполняемый файл только для определённой платформы, самораспаковывающийся jar-файл может распространяться и выполняться на любой поддерживающей Java платформе.

Создать самораспаковывающийся jar-файл просто. Необходимы только специальный файл манифеста JAR, основанная на Java программа-распаковщик, zip- или jar-файл, содержащий файлы с основным содержимым, и любая jar-утилита из Java SDK.

Файл манифеста

Чтобы делать исполняемые jar-файлы, нужен, прежде всего, файл манифеста с именем MANIFEST.MF в каталоге META-INF . Файл манифеста может содержать множество разных пунктов; однако для наших целей здесь мы должны только определить имя Java-класса, который содержит метод main() основанного на Java распаковщика:

Main-класс: ZipSelfExtractor .

Мы добавили файл манифеста с именем jarmanifest к коду примера данного совета. Для получения дополнительной информации по файлу манифеста см. спецификацию jar-файла.

Распаковщик

Программу-распаковщик можно сделать, используя различные подходы. Подход, предлагаемый нами здесь, простой и непосредственный. Сначала программа-распаковщик узнаёт имя самораспаковывающегося jar-файла. Имея это имя, распаковщик использует стандартные, встроенные zip/jar-библиотеки Java, чтобы извлечь файлы, содержащиеся в архиве. Полный исходный текст ZipSelfExtractor можно найти в ZipSelfExtractor.java.

Передача имени jar-файла в программу-распаковщик может оказаться непростым делом. Хотя имя jar-файла появляется в командной строке, это имя не передаётся main()-методу класса. Поэтому в программе-распаковщике мы используем следующий код, чтобы извлечь информацию из URL, который указывает на распаковщик:


private String getJarFileName ()
{
 myClassName = this.getClass().getName() + ".class";
 URL urlJar = this.getClass().getClassLoader().getSystemResource(myClassName);
 String urlStr = urlJar.toString();
 int from = "jar:file:".length();
 int to = urlStr.indexOf("!/");
 return urlStr.substring(from, to);
}

Заметьте, что в метод getSystemResource() мы передаем myClassName вместо ZipSelfExtractor.class . Это позволяет изменять имя программы-распаковщика без изменения этой части кода. Мы ищем имя текущего класса, чтобы определить myClassName .

Затем мы извлекаем имя jar-файла. Сначала мы запрашиваем URL к файлу класса, содержащему выполняющийся в настоящее время класс (который является распаковщиком). Получив URL, мы можем получить имя jar-файла. По определению, URL программы-распаковщика JAR следует за основным форматом:

  1. jar:, который показывает, что этот исполняемый файл запускается из jar-файла.
  2. URL jar-файла типа file:/C:/temp/test.jar, за которым следует символ !.
  3. Имя пути файла внутри jar-архива типа /ZipSelfExtractor.class.

В случае программы-распаковщика URL может выглядеть как:

jar:file:/home/johnm/test/zipper.jar!/ZipSelfExtractor.class

Теперь, имея имя jar-файла, мы можем выполнить разархивацию. Распаковщик опирается на встроенные библиотеки Java для манипулирования zip/jar-файлами, чтобы распаковать файлы, содержащиеся в архиве. См. Ресурсы, чтобы получить дополнительную информацию о библиотеках Java для манипулирования zip/jar-файлами.

Для простоты использования распаковщик сделан в виде графического приложения Java. Приложение использует класс JFileChooser , чтобы позволить пользователям определять каталог назначения, в который они хотят извлечь файлы. ProgressMonitor показывает прогресс процесса извлечения. Если файл может быть записан поверх уже существующего файла, пользователь получает запрос, действительно ли следует переписать существующий файл. По завершении стандартное диалоговое окно представляет статистику разархивации.

Наконец, программа-распаковщик следит, чтобы не извлечь файлы, которые делают jar-файл самораспаковывающимся, т.е. файл манифеста и .class -файл распаковщика; программа должна только извлечь первоначальное содержание JAR. Эти два файла — принадлежность самораспаковывающегося jar-файла, и не входят в число оригинальных, основных файлов содержимого.

Упаковка jar-файла

Теперь, имея файл манифеста и распаковщик, мы можем создать самораспаковывающийся jar-файл. Мы можем вручную использовать jar-утилиту из JDK, чтобы сделать самораспаковывающийся jar-файл. Например, предположив, что у Вас есть zip-файл myzip.zip , Вы можете предпринять следующие шаги, чтобы создать из него самораспаковывающийся файл:

  1. Перейдите в каталог, содержащий myzip.zip .
  2. Загрузите zipper.jar .
  3. Извлеките файлы в текущий каталог. Мы сделали этот jar-архив самораспаковывающимся.
    java -jar zipper.jar
  4. Скопируйте файл zipper.class в ZipSelfExtractor.class .
  5. Переименуйте myzip.zip в myzip.jar .
  6. Обновите myzip.jar , добавив файлы jarmanifest и ZipSelfExtractor.class :
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class

Теперь myzip.jar стал самораспаковывающимся файлом на всех платформах, содержащих среду выполнения Java-программ (JRE) версии 1.2 или позже. Чтобы выполнить самораспаковывающийся jar-файл, введите:

java -jar myzip.jar

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

Упражнение для читателя

Текущий ZipSelfExtract не обеспечивает хорошей интеграции, если Вы делаете самораспаковывающийся jar-архив из существующего jar-файла, уже содержащего файл манифеста. Добавьте интеллекта к распаковщику и инструкциям создания, чтобы Вы могли работать с существующими jar-файлами, содержащими файлы манифеста.

Свобода действий с JAR

Самораспаковывающийся jar-файл — хороший механизм распространения файлов на различных платформах. Самораспаковывающиеся jar-архивы просто создавать, и минимальное требование к пользователю установить JRE 1.2 или более позднюю версию — разумный компромисс, позволяющий получить кросс-платформенную поддержку.

Вместо создания самораспаковывающегося jar-файла вручную испытайте ZipAnywhere. ZipAnywhere — полнофункциональная zip/jar-утилита, написанная на 100% чистой Java. Это — свободно распространяемый инструмент с графическим интерфейсом типа WinZip, который позволяет создавать самораспаковывающиеся jar-файлы одним щелчком кнопки.

Об авторах

Доктор Зунх Стив Джин — инженер-программист в Rational Software и автор ZipAnywhere .

Джон Д. Митчелл — редактор и автор колонки Tips 'N Tricks в JavaWorld . Джон также основатель и главный архитектор Non, Inc. , консультационной фирмы по управлению технологическими деловыми рисками.

Ресурсы

Reprinted with permission from the January 2001 edition of JavaWorld magazine. Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/jw-01-2001/jw-0119-jspframe.html

З. Стив Джин, Джон Д. Митчелл
Перевод на русский © Дмитрий Габинский, 2003



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Программирование под ОС / Java /

Особенности Java 5
23-02-2010   

Java 5 обладает некоторыми полезными возможностями. В данной статье мы рассмотрим их и узнаем, как можно извлечь из них выгоду. В этой части мы рассмотрим auto-boxing foreach... подробнее

Кол. просмотров: общее - 3427 сегодня - 3

Особенности Java 5. Часть 2
23-02-2010   

В первой части мы обсудили новые возможности Java 5 относительно функции auto-boxing и цикла foreach. В данной части мы обсудим поддержку функций с переменным числом аргументов и статическое импортирование (static import). Поскольку другие функции, такие как enum, annotation, и generics, заслуживают отдельной статьи, мы их не будет демонстрировать в данной... подробнее

Кол. просмотров: общее - 3329 сегодня - 2

Расширение функциональности элементов пользовательского интерфейса в Java
05-05-2009   

Довольно часто при создании приложений с GUI (stand alone приложений или апплетов) приходится сталкиваться с необходимостью несколько изменить внешний вид и поведение стандартных компонентов пользовательского интерфейса... подробнее

Кол. просмотров: общее - 3630 сегодня - 3

Введение в сервлеты
05-05-2009   

Что такое сервлет ? Это класс порожденный от класса HttpServlet с переопреденными методами doGet и doPost (управление приходит в один из этих методов в зависимости от того какого типа был запрос. Надеюсь у Вас есть некоторый опыт в cgi-программировании... подробнее

Кол. просмотров: общее - 3261 сегодня - 1

Java Server Pages
05-05-2009   

Технология Java Server Pages (JSP) является составной частью единой технологии создания бизнес-приложений J2EE. JSP - это альтернативная методика разработки приложений... подробнее

Кол. просмотров: общее - 3385 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects