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:
krukke:
, som viser at den kjørbare filen kjører fra en jar-fil- Jar-filens URL, for eksempel
fil: / C: /temp/test.jar
, etterfulgt av!
karakter - 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:
cd
til katalogen som inneholdermyzip.zip
- nedlasting
glidelås.jar
- Pakk ut filene i gjeldende katalog. Vi har gjort det til en selvutpakkende JAR:
java -jar glidelås.jar
- Kopier
glidelås. klasse
fil tilZipSelfExtractor.class
- Gi nytt navn
myzip.zip
sommyzip.jar
- Oppdater
myzip.jar
medjarmanifest
ogZipSelfExtractor.class
filer:jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class
Nå 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.
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.