Programmering

Java Tips 120: Utfør selvutpakkende JARer

I mange år har Phil Katzs arkivopprettelse, zip, vært et av de mest populære arkiveringsformatene. Sun har vedtatt zip-formatet som grunnlag for Java Archive (JAR). Sun har utvidet zip-formatets bruk med forskjellige konvensjoner, slik at du kan pakke Java-klasser i en arkivfil. Med tillegg av JAR manifestere Java-kjøretiden kan enkelt finne og utføre hovedklassen til Java-applikasjonen som finnes i jar-filen.

Noen glidelås verktøy kan lage selvutpakkende arkiver for forskjellige plattformer, for eksempel MS Windows. Verktøyverktøyet kombinerer et vanlig zip-arkiv med et utvinningsprogram for å generere en ny kjørbar (exe) fil. Mottakere av exe-filen trenger bare å kjøre den for å trekke ut innholdet i det opprinnelige zip-arkivet. Den kjørbare filen kjører utpakkerprogrammet for å trekke ut de arkiverte filene i en brukerdefinert utdatakatalog.

Du kan konvertere en base-zip- eller jar-fil til en kjørbar jar-fil på hvilken som helst Java-plattform. Mens den selvutpakkende zip bare kan lage plattformsspesifikke kjørbare filer, kan den selvutpakkende jar-filen distribueres til og kjøres på hvilken som helst plattform som støtter Java.

Å lage den selvutpakkende jar-filen er grei. Du trenger bare en spesiell JAR-manifestfil, et Java-basert ekstraksjonsprogram, zip- eller jar-filen som inneholder basisinnholdsfilene, og alle Java SDK-er krukke verktøyapplikasjon.

Manifestfilen

For å lage kjørbare JAR, trenger du først en manifestfil kalt MANIFEST.MF i META-INF katalog. Manifestfilen kan inneholde en rekke mulige oppføringer; for vårt formål her, trenger vi imidlertid bare å spesifisere navnet på Java-klassen som inneholder det Java-baserte ekstraktorprogrammet hoved() metode:

Hovedklasse: ZipSelfExtractor 

Vi har lagt til en manifestfil med navnet jarmanifest til dette tipsets eksempelkode. For mer informasjon om manifestfilen, se Jar File Specification.

Avtrekkeren

Du kan lage avtrekksprogrammet ved hjelp av forskjellige tilnærminger. Tilnærmingen vi presenterer her er enkel og grei. Først finner utpakkingsprogrammet navnet på den selvutpakkende jar-filen. Med det navnet i hånden bruker utdrageren standard, innebygde Java zip / jar-biblioteker for å trekke ut innholdsfilene fra arkivet. Du finner full kildekode for ZipSelfExtractor i ZipSelfExtractor.java.

Å få jar-filnavnet i avtrekksprogrammet kan være vanskelig. Selv om jar-filens navn vises på kommandolinjen, blir ikke dette navnet overført til klassen hoved() metode. Derfor bruker vi følgende kode i uttrekksprogrammet for å trekke ut informasjonen fra URL-en som peker til uttrekkeren:

 privat streng getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); Streng urlStr = urlJar.toString (); int fra = "jar: file:". lengde (); int to = urlStr.indexOf ("! /"); return urlStr.substring (fra, til); } 

Legg merke til at i getSystemResource () metoden vi passerer myClassName i stedet for ZipSelfExtractor.class. Det lar oss endre navnet på utvinningsprogrammet uten å endre den delen av koden. Vi setter myClassName ved å slå opp gjeldende klasses navn.

Deretter trekker vi ut jar-filens navn. Først ber vi om en URL til klassefilen som inneholder den tiden som kjører klassen (som er ekstraktorprogrammet). Når vi har nettadressen, kan vi klippe ut jar-filens navn. Per definisjon følger URL-en til JAR extractor-programmet det grunnleggende formatet:

  1. krukke:, som viser at den kjørbare filen kjører fra en jar-fil
  2. Jar-filens URL, for eksempel fil: / C: /temp/test.jar, etterfulgt av ! karakter
  3. Det interne banenavnet til filen i JAR, for eksempel /ZipSelfExtractor.class

I tilfelle avtrekksprogrammet kan URL-adressen se ut som:

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

Nå som vi har navnet på jar-filen, kan vi utføre ekstraksjonen. Innvollene til ekstraksjonsprogrammet er avhengige av de innebygde Java-zip / jar-filmanipuleringsbibliotekene for å pakke ut innholdsfilene i arkivet. Se Ressurser for mer om zip / jar-filmanipuleringsbibliotekene.

For enkel bruk er avtrekkeren et grafisk Java-program. Søknaden bruker JFileChooser klasse for å la brukerne spesifisere destinasjonskatalogen som filene skal ekstraheres til. EN ProgressMonitor viser fremdriften i utvinningsprosessen. Hvis en fil kan overskrive en allerede eksisterende fil, blir brukeren spurt om han vil overskrive den eksisterende filen eller ikke. Avslutningsvis presenterer en standard dialogboks utvinningsstatistikk.

Til slutt sjekker utpakkerprogrammet at det ikke trekker ut filene som gjør jar-filen selvutpakkende - manifestfilen og utpakkerens .klasse fil; programmet skal bare trekke ut det originale JAR-innholdet. Disse to filene er gjenstander av den selvutpakkende jar-filen og ikke en del av de originale, grunnleggende innholdsfilene.

Pakke glassfilen

Nå som vi har manifestfilen og utpakkerprogrammet, kan vi bygge den selvutpakkende jar-filen. Vi kan bruke JDK-ene manuelt krukke verktøy for å lage en selvutpakkende jar-fil. For eksempel forutsatt at du har en zip-fil kalt myzip.zip, kan du utføre følgende trinn for å lage en selvutpakkende fil fra den:

  1. cd til katalogen som inneholder myzip.zip
  2. nedlasting glidelås.jar
  3. Pakk ut filene i gjeldende katalog. Vi har gjort det til en selvutpakkende JAR:
    java -jar glidelås.jar 
  4. Kopier glidelås. klasse fil til ZipSelfExtractor.class
  5. Gi nytt navn myzip.zip som myzip.jar
  6. Oppdater myzip.jar med jarmanifest og ZipSelfExtractor.class filer:
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

myzip.jar er selvutpakkende på alle plattformer som inneholder Java Runtime Environment (JRE) 1.2 eller nyere. For å utføre den selvutpakkende jar-filen, kjør:

java -jar myzip.jar 

Merk at noen plattformer kan ha bindinger allerede konfigurert slik at du kan utføre jar-filen bare ved å klikke på myzip.jar filikon, som kjører kommandolinjekvivalenten.

Trening for leseren

Den nåværende ZipSelfExtract integreres ikke bra hvis du lager en selvutpakkende JAR av en eksisterende jar-fil som inneholder en manifestfil. Legg intelligens til selvutpakkeren og opprettingsinstruksjonene, slik at du kan håndtere eksisterende jar-filer som inneholder manifestfiler.

Frigjør hånden din fra JAR

En selvutpakkende jar-fil er en god mekanisme for fildistribusjon på tvers av plattformer. Selvutpakkende JAR er enkle å lage, og det minimale brukerkravet til en JRE 1.2 eller nyere installasjon er en rimelig avveining for å få støtte på tvers av plattformer.

I stedet for å lage den selvutpakkende jar-filen manuelt, sjekk ut ZipAnywhere. ZipAnywhere er et komplett utvalg glidelås/krukke verktøy skrevet i 100% ren Java. Det er et gratis GUI-basert verktøy a la WinZip og kan lage selvutpakkende jar-filer med et enkelt klikk på en knapp.

Dr. Zunhe Steve Jin er programvareingeniør hos Rational Software og forfatter av ZipAnywhere. John D. Mitchell er redaktør i JavaWorld Tips 'N Tricks-kolonnen. John er også grunnlegger og sjefarkitekt for Non, Inc., en teknologisk forretningsrisikostyringsrådgivning.

Lær mer om dette emnet

  • Last ned kildefilene for dette tipset

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

  • "Java Tips 49Hvordan trekke ut Java-ressurser fra JAR og Zip Archives," John D. Mitchell og Arthur Choi (JavaWorld)

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

  • "Java Tip 70 Opprett objekter fra Jar-filer!" John D. Mitchell (JavaWorld)

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

  • Jar File Specification

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

  • JAR kommandolinjeguide

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

  • ZipAnywhere, GUI-basert selvutpakkende JAR-verktøy

    //www.geocities.com/zipanywhere

  • Vis alle forrige Java-tips og send inn dine egne

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

  • Lær Java fra grunnen av i JavaWorld 's Java 101 kolonne

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

  • Java-eksperter svarer på de tøffeste Java-spørsmålene dine i JavaWorld 's Java Q&A kolonne

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

  • Bla gjennom artikler etter emne i JavaWorld 's Aktuell indeks

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

  • Snakk ut i Java-forumet vårt

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

  • Melde seg på JavaWorld 's gratis ukentlige nyhetsbrev

    //www.idg.net/jw-abonnement

  • Du finner et vell av IT-relaterte artikler fra søsterpublikasjonene våre på .net

Denne historien, "Java Tip 120: Execute self-extracting JARs" ble opprinnelig utgitt av JavaWorld.

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