Programovanie

Tip Java 120: Vykonajte samorozbaľovacie súbory JAR

Po mnoho rokov je tvorba archívu Phila Katza, zip, jedným z najpopulárnejších formátov na archiváciu súborov. Spoločnosť Sun prijala formát zip ako základ pre Java Archive (JAR). Spoločnosť Sun rozšírila použitie formátu zip s rôznymi konvenciami, aby ste mohli triedy Java zbaliť do archívneho súboru. S dodatkom JAR prejav súboru, môže runtime Java ľahko nájsť a priamo spustiť hlavnú triedu aplikácie Java obsiahnutú v súbore jar.

Niektoré PSČ môžu vytvárať obslužné nástroje samorozbaľovací archívy pre rôzne platformy, napríklad MS Windows. Obslužný nástroj kombinuje bežný archív zip s extraktorovým programom a generuje nový spustiteľný súbor (exe). Príjemcovia súboru exe ho musia iba spustiť, aby extrahovali obsah pôvodného archívu zip. Spustiteľný súbor spustí program na extrakciu, pomocou ktorého extrahuje archivované súbory do používateľom zadaného výstupného adresára.

Môžete previesť základný súbor zip alebo jar do spustiteľného súboru jar na ľubovoľnej platforme Java. Zatiaľ čo samorozbaľovací zip dokáže vytvoriť iba spustiteľné súbory špecifické pre platformu, samorozbaľovací súbor jar je možné distribuovať a spustiť na ľubovoľnej platforme podporujúcej Javu.

Vytvorenie samorozbaľovacieho súboru jar je jednoduché. Potrebujete iba špeciálny súbor manifestu JAR, extrakčný program založený na prostredí Java, súbor zip alebo jar obsahujúci súbory základného obsahu a všetky súpravy Java SDK. jar úžitková aplikácia.

Súbor manifestu

Ak chcete vytvoriť spustiteľné súbory JAR, potrebujete najskôr súbor manifestu s názvom MANIFEST.MF v META-INF adresár. Súbor manifestu môže obsahovať niekoľko možných záznamov; pre naše účely tu však stačí zadať názov triedy Java, ktorá obsahuje extraktorový program založený na Jave hlavný() metóda:

Hlavná trieda: ZipSelfExtractor 

Pridali sme súbor manifestu s názvom jarmanifest podľa príkladu kódu tohto tipu. Ďalšie informácie o súbore manifestu nájdete v špecifikácii súboru Jar.

Extraktor

Program na extrakciu môžete vytvoriť pomocou rôznych prístupov. Prístup, ktorý tu predstavujeme, je jednoduchý a priamy. Najskôr extrakčný program zistí názov samorozbaľovacieho súboru jar. S týmto menom v ruke extraktor využíva štandardné vstavané knižnice Java zip / jar na extrahovanie súborov obsahu z archívu. Celý zdrojový kód pre server ZipSelfExtractor v ZipSelfExtractor.java.

Získanie názvu súboru jar v extraktorovom programe môže byť zložité. Aj keď sa názov príkazového riadku zobrazuje na príkazovom riadku, tento názov sa neprenesie do triedy hlavný() metóda. Preto v extraktorovom programe používame na extrahovanie informácií z adresy URL, ktorá smeruje na extraktor, nasledujúci kód:

 private String getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); Reťazec urlStr = urlJar.toString (); int from = "jar: file:". length (); int to = urlStr.indexOf ("! /"); vrátiť urlStr.substring (z, do); } 

Všimnite si, že v getSystemResource () metóda, ktorú minieme myClassName namiesto ZipSelfExtractor.class. Umožní nám to zmeniť názov programu extraktora bez zmeny tej časti kódu. Nastavili sme myClassName vyhľadaním názvu aktuálnej triedy.

Ďalej extrahujeme názov súboru jar. Najskôr požiadame o adresu URL súboru triedy obsahujúceho momentálne spustenú triedu (čo je program na extrakciu). Keď máme adresu URL, môžeme vyrezať názov súboru jar. Podľa definície má URL extraktorového programu JAR základný formát:

  1. nádoba:, čo ukazuje, že spustiteľný súbor beží zvnútra súboru jar
  2. URL súboru jar, ako napr súbor: / C: /temp/test.jar, za ktorým nasleduje ! znak
  3. Názov internej cesty k súboru v rámci súboru JAR, napríklad /ZipSelfExtractor.class

V prípade extraktorového programu môže adresa URL vyzerať takto:

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

Teraz, keď máme názov súboru jar, môžeme vykonať extrakciu. Vnútornosti extrakčného programu sa spoliehajú na zabudované knižnice na manipuláciu so súbormi Java zip / jar, ktoré slúžia na dekomprimáciu súborov s obsahom obsiahnutých v archíve. Viac informácií o knižniciach na manipuláciu so súbormi zip / jar nájdete v zdrojoch.

Pre jednoduchšie použitie je extraktor grafická aplikácia Java. Aplikácia používa JFileChooser triedy, aby používatelia mohli určiť cieľový adresár, do ktorého chcú súbory extrahovať. A ProgressMonitor ukazuje postup extrakčného procesu. Ak by súbor mohol prepísať už existujúci súbor, používateľ sa spýta, či má alebo nemá prepísať existujúci súbor. Na záver štandardné dialógové okno predstavuje štatistiku extrakcie.

Nakoniec program na extrakciu skontroluje, či neextrahuje súbory, vďaka ktorým je súbor jar samorozbaľovací - súbor manifestu a súbor extraktora. .trieda pilník; program by mal iba extrahovať pôvodný obsah JAR. Tieto dva súbory sú artefakty samorozbaľovacieho súboru jar a nie sú súčasťou pôvodných súborov základného obsahu.

Balí sa nádoba

Teraz, keď máme súbor manifestu a program na extrakciu, môžeme vytvoriť samorozbaľovací súbor jar. Môžeme manuálne použiť JDK jar pomôcka na vytvorenie samorozbaľovacieho súboru jar. Napríklad za predpokladu, že máte súbor zip s názvom myzip.zip, môžete z nich vytvoriť samorozbaľovací súbor:

  1. cd do adresára obsahujúceho myzip.zip
  2. Stiahnuť ▼ zipper.jar
  3. Extrahujte súbory do aktuálneho adresára. Urobili sme z neho samorozbaľovací JAR:
    java -jar zipper.jar 
  4. Skopírujte zips.trieda podať do ZipSelfExtractor.class
  5. Premenovať myzip.zip ako myzip.jar
  6. Aktualizácia myzip.jar s jarmanifest a ZipSelfExtractor.class súbory:
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

Teraz myzip.jar je samorozbaľovací na všetkých platformách obsahujúcich prostredie Java Runtime Environment (JRE) 1.2 alebo novšie. Ak chcete spustiť samorozbaľovací súbor jar, spustite:

java -jar myzip.jar 

Upozorňujeme, že niektoré platformy môžu mať už nastavené väzby, takže súbor jar môžete spustiť kliknutím na ikonu myzip.jar ikona súboru, ktorá spustí ekvivalent príkazového riadku.

Cvičenie pre čitateľa

Súčasný ZipSelfExtract sa zle integruje, ak vytvoríte samorozbaľovací súbor JAR z existujúceho súboru jar obsahujúceho súbor manifestu. Pridajte inteligenciu do extraaktora a pokynov na vytvorenie, aby ste mohli pracovať s existujúcimi súbormi jar, ktoré obsahujú súbory manifestu.

Osloboďte ruku od JAR

Samorozbaľovací súbor jar je dobrým mechanizmom na distribúciu súborov medzi platformami. Samorozbaľovacie súbory JAR sa vytvárajú ľahko a minimálna požiadavka používateľa na inštaláciu JRE 1.2 alebo novšiu je rozumným kompromisom pre získanie podpory pre rôzne platformy.

Namiesto manuálneho vytvárania samorozbaľovacieho súboru jar si pozrite ZipAnywhere. ZipAnywhere je plne funkčný PSČ/jar obslužný nástroj napísaný v 100% čistej Jave. Je to bezplatný nástroj založený na grafickom používateľskom rozhraní a a WinZip. Môže vytvárať samorozbaľovacie súbory jar kliknutím na tlačidlo.

Dr. Zunhe Steve Jin je personálny softvérový inžinier v spoločnosti Rational Software a autor ZipAnywhere. John D. Mitchell je prispievajúcim redaktorom stĺpca N triky JavaWorld Tips. John je tiež zakladateľom a hlavným architektom spoločnosti Non, Inc., konzultačnej praxe v oblasti riadenia technologických obchodných rizík.

Získajte viac informácií o tejto téme

  • Stiahnite si zdrojové súbory pre tento tip

    //www.javaworld.com/javaworld/javatips/javatip120/zipper.jar

  • „Tip Java 49 Ako extrahovať zdroje Java z archívov JAR a Zip,“ John D. Mitchell a Arthur Choi (JavaWorld)

    //www.javaworld.com/javaworld/javatips/jw-javatip49.html

  • „Java Tip 70Vytváranie objektov zo súborov Jar!“ John D. Mitchell (JavaWorld)

    //www.javaworld.com/javaworld/javatips/jw-javatip70.html

  • Špecifikácia súboru Jar

    //java.sun.com/j2se/1.3/docs/guide/jar/jar.html

  • Sprievodca príkazovým riadkom JAR

    //java.sun.com/j2se/1.3/docs/tooldocs/win32/jar.html

  • ZipAnywhere, samorozbaľovací nástroj na vytváranie JAR založený na GUI

    //www.geocities.com/zipanywhere

  • Zobraziť všetky predchádzajúce Tipy pre Java a odovzdať svoje vlastné

    //www.javaworld.com/javatips/jw-javatips.index.html

  • Naučte sa Java od základu v JavaWorld 's Java 101 stĺpec

    //www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html

  • Odborníci na jazyk Java odpovedajú na vaše najťažšie otázky týkajúce sa jazyka Java v jazyku JavaWorld 's Java Q&A stĺpec

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

  • Prechádzajte články podľa tém v JavaWorld 's Aktuálny index

    //www.javaworld.com/channel_content/jw-topical-index.shtml

  • Vystúpte v našom fóre Java

    //forums.idg.net/webx?13@@.ee6b802

  • Zaregistrovať JavaWorld 's bezplatné týždenné e-mailové informačné vestníky

    //www.idg.net/jw-subscribe

  • Množstvo článkov týkajúcich sa IT z našich sesterských publikácií nájdete na .net

Tento príbeh, „Java Tip 120: Execute self-extracting JARs“, bol pôvodne publikovaný spoločnosťou JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found