Саморозпаковуються jar-файли

Створюйте зручні у використанні крос-платформні Java-архіви.

Багато років 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 Розпакувальник:

Ми додали файл маніфесту з ім'ям jarmanifest до коду прикладу даного ради. Для отримання додаткової інформації по файлу маніфесту см. Специфікацію jar-файлу.

Розпакувальник

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

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

Зауважте, що в метод 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-файлу, ми можемо виконати разархивацию. Розпакувальник спирається на вбудовані бібліотеки Java для маніпулювання zip / jar-файлами, щоб розпакувати файли, що містяться в архіві. Див. Ресурси. щоб отримати додаткову інформацію про бібліотеки Java для маніпулювання zip / jar-файлами.

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

Упаковка 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-файли одним клацанням кнопки.


Warning. mysql_connect () [function.mysql-connect]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning. mysql_db_query () [function.mysql-db-query]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning. mysql_db_query () [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning. mysql_fetch_array (): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Дізнайся про що ти насправді зараз думаєш тут.


[An error occurred while processing this directive]


Warning. mysql_connect () [function.mysql-connect]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning. mysql_db_query () [function.mysql-db-query]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning. mysql_db_query () [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning. mysql_fetch_array (): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95