Programování

Java Tip 120: Proveďte samorozbalovací soubory JAR

Po mnoho let je tvorba archivu Phila Katze, zip, jedním z nejpopulárnějších formátů pro archivaci souborů. Sun přijal formát zip jako základ pro Java Archive (JAR). Sun rozšířil použití formátu zip o různé konvence, takže můžete zabalit třídy Java do archivního souboru. S přidáním JAR manifest souboru, může běhový modul Java snadno najít a přímo spustit hlavní třídu aplikace Java obsaženou v souboru jar.

Nějaký zip mohou vytvářet obslužné nástroje samorozbalovací archivy pro různé platformy, například MS Windows. Obslužný nástroj kombinuje běžný archiv zip s extraktorovým programem a generuje nový spustitelný soubor (exe). Příjemci souboru exe jej stačí spustit, aby rozbalili obsah původního archivu ZIP. Spustitelný soubor spustí program pro extrakci a extrahuje archivované soubory do uživatelem zadaného výstupního adresáře.

Základní soubor zip nebo jar můžete převést na spustitelný soubor jar na libovolné platformě Java. Zatímco samorozbalovací zip může vytvářet pouze spustitelné soubory specifické pro platformu, samorozbalovací soubor jar lze distribuovat a spustit na jakékoli platformě podporující Javu.

Vytvoření samorozbalovacího souboru jar je jednoduché. Potřebujete pouze speciální soubor manifestu JAR, extrakční program založený na jazyce Java, soubor zip nebo jar obsahující soubory základního obsahu a všechny sady Java SDK. sklenice obslužná aplikace.

Soubor manifestu

Chcete-li vytvořit spustitelné soubory JAR, potřebujete nejprve soubor manifestu s názvem MANIFEST.MF v META-INF adresář. Soubor manifestu může obsahovat řadu možných položek; pro naše účely zde však stačí zadat název třídy Java, která obsahuje extraktorový program založený na Javě hlavní() metoda:

Hlavní třída: ZipSelfExtractor 

Přidali jsme soubor manifestu s názvem jarmanifest k příkladu kódu tohoto tipu. Další informace o souboru manifestu najdete ve specifikaci souboru Jar.

Extraktor

Program extraktoru můžete vytvořit pomocí různých přístupů. Přístup, který zde představujeme, je jednoduchý a přímý. Nejprve program pro extrakci zjistí název samorozbalovacího souboru jar. S tímto názvem v ruce extraktor využívá standardní vestavěné knihovny Java zip / jar pro extrahování souborů obsahu z archivu. Celý zdrojový kód najdete pro ZipSelfExtractor v ZipSelfExtractor.java.

Získání názvu souboru jar v extraktorovém programu může být obtížné. Ačkoli se název souboru jar objeví na příkazovém řádku, tento název není předán třídě hlavní() metoda. Proto v extraktorovém programu používáme následující kód k extrahování informací z adresy URL, která odkazuje na extraktor:

 private String getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); Řetězec urlStr = urlJar.toString (); int from = "jar: file:". length (); int to = urlStr.indexOf ("! /"); vrátit urlStr.substring (od, do); } 

Všimněte si, že v getSystemResource () metoda, kterou projdeme myClassName namísto ZipSelfExtractor.class. To nám umožňuje změnit název programu extraktoru beze změny této části kódu. Jsme si stanovili myClassName vyhledáním názvu aktuální třídy.

Dále extrahujeme název souboru jar. Nejprve požádáme o adresu URL souboru třídy obsahujícího aktuálně běžící třídu (což je extraktorový program). Jakmile máme adresu URL, můžeme vyříznout název souboru jar. Podle definice se adresa URL extrakčního programu JAR řídí základním formátem:

  1. sklenice:, což ukazuje, že spustitelný soubor běží zevnitř souboru jar
  2. URL souboru jar, například soubor: / C: /temp/test.jar, následovaný ! charakter
  3. Název interní cesty k souboru v rámci JAR, například /ZipSelfExtractor.class

V případě extraktorového programu může adresa URL vypadat takto:

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

Nyní, když máme název souboru jar, můžeme provést extrakci. Střeva extrakčního programu spoléhají na vestavěné knihovny pro manipulaci se soubory zip / jar v Javě, které dekomprimují soubory obsahu obsažené v archivu. Další informace o knihovnách pro manipulaci se soubory zip / jar najdete v Zdrojích.

Pro snadné použití je extraktor grafická aplikace Java. Aplikace používá JFileChooser třída, aby uživatelé mohli určit cílový adresář, do kterého chtějí soubory extrahovat. A ProgressMonitor ukazuje průběh procesu extrakce. Pokud by soubor mohl přepsat již existující soubor, je uživatel dotázán, zda přepsat existující soubor. Na závěr standardní dialogové okno představuje statistiku extrakce.

Nakonec extraktorový program zkontroluje, zda neextrahuje soubory, díky nimž je soubor jar samorozbalovací - soubor manifestu a extraktor .třída soubor; program by měl pouze extrahovat původní obsah JAR. Tyto dva soubory jsou artefakty samorozbalovacího souboru jar a nejsou součástí původních souborů základního obsahu.

Balení souboru jar

Nyní, když máme soubor manifestu a extraktorový program, můžeme vytvořit samorozbalovací soubor jar. Můžeme ručně použít JDK sklenice nástroj pro vytvoření samorozbalovacího souboru jar. Například za předpokladu, že máte soubor zip s názvem myzip.zip, můžete z něj vytvořit samorozbalovací soubor následujícím postupem:

  1. CD do adresáře obsahujícího myzip.zip
  2. Stažení zipper.jar
  3. Extrahujte soubory do aktuálního adresáře. Udělali jsme z něj samorozbalovací JAR:
    java -jar zipper.jar 
  4. Zkopírujte zip. třída soubor do ZipSelfExtractor.class
  5. Přejmenovat myzip.zip tak jako myzip.jar
  6. Aktualizace myzip.jar s jarmanifest a ZipSelfExtractor.class soubory:
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

Nyní myzip.jar je samorozbalovací na všech platformách obsahujících prostředí Java Runtime Environment (JRE) 1.2 nebo novější. Chcete-li spustit samorozbalovací soubor jar, spusťte:

java -jar myzip.jar 

Všimněte si, že na některých platformách mohou být vazby již nastaveny, takže můžete spustit soubor jar pouhým kliknutím na myzip.jar ikona souboru, která spustí ekvivalent příkazového řádku.

Cvičení pro čtenáře

Aktuální ZipSelfExtract neintegruje se dobře, pokud vytvoříte samorozbalovací soubor JAR z existujícího souboru jar obsahujícího soubor manifestu. Přidejte inteligenci do samorozbalovače a pokynů k vytvoření, abyste mohli pracovat s existujícími soubory jar, které obsahují soubory manifestu.

Uvolněte ruku z JAR

Samorozbalovací soubor jar je dobrým mechanismem pro distribuci souborů mezi platformami. Samorozbalovací soubory JAR se snadno vytvářejí a minimální uživatelský požadavek instalace JRE 1.2 nebo novější je rozumným kompromisem pro získání podpory pro různé platformy.

Místo toho, abyste ručně vytvořili samorozbalovací soubor jar, podívejte se na ZipAnywhere. ZipAnywhere je plně vybavený zip/sklenice obslužný nástroj napsaný ve 100% čisté Javě. Je to bezplatný nástroj založený na grafickém uživatelském rozhraní a la WinZip a může vytvářet samorozbalovací soubory jar kliknutím na tlačítko.

Dr. Zunhe Steve Jin je softwarový inženýr zaměstnanců ve společnosti Rational Software a autor ZipAnywhere. John D. Mitchell je přispívajícím redaktorem sloupce N triky JavaWorld Tips. John je také zakladatelem a hlavním architektem společnosti Non, Inc., poradenské praxe v oblasti řízení technologických obchodních rizik.

Další informace o tomto tématu

  • Stáhněte si zdrojové soubory pro tento tip

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

  • „Tip Java 49 Jak extrahovat zdroje Java z archivů JAR a Zip,“ John D. Mitchell a Arthur Choi (JavaWorld)

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

  • „Java Tip 70Vytvářejte objekty ze souborů jar!“ John D. Mitchell (JavaWorld)

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

  • Specifikace souboru Jar

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

  • Průvodce příkazovým řádkem JAR

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

  • ZipAnywhere, samorozbalovací nástroj pro vytváření JAR na základě grafického uživatelského rozhraní

    //www.geocities.com/zipanywhere

  • Zobrazit všechny předchozí Tipy pro Java a odešlete vlastní

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

  • Naučte se Java od základu v JavaWorld 's Java 101 sloupec

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

  • Odborníci na jazyk Java odpovídají na vaše nejnáročnější otázky týkající se jazyka Java v JavaWorld 's Java Q&A sloupec

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

  • Procházejte články podle témat v JavaWorld 's Aktuální rejstřík

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

  • Promluvte na našem fóru Java

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

  • Přihlásit se JavaWorld 's týdenní e-mailové zpravodaje zdarma

    //www.idg.net/jw-subscribe

  • Spoustu článků o IT z našich sesterských publikací najdete na .net

Tento příběh, „Java Tip 120: Execute self-extracting JARs“, původně publikoval JavaWorld.

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