Ohjelmointi

Java Tip 120: Suorita itsepurkautuvat JAR-tiedostot

Monien vuosien ajan Phil Katzin arkistointi, zip, on ollut yksi suosituimmista tiedostojen arkistointimuodoista. Sun on ottanut zip-muodon Java-arkiston (JAR) perustaksi. Sun on laajentanut zip-muodon käyttöä useilla tavoilla, jotta voit pakata Java-luokat arkistotiedostoon. JAR: n lisääminen selvä Java-ajonaikainen tiedosto voi helposti etsiä ja suorittaa jar-tiedostossa olevan Java-sovelluksen pääluokan.

Jonkin verran postinumero apuohjelmat voivat luoda itsepurkautuva arkistot useille alustoille, kuten MS Windows. Apuohjelma yhdistää tavallisen zip-arkiston purkajaohjelmaan uuden suoritettavan tiedoston (exe) luomiseksi. Exe-tiedoston vastaanottimien on vain suoritettava se purkamaan alkuperäisen zip-arkiston sisältö. Suoritettava tiedosto ajaa poimintaohjelman purkamaan arkistoidut tiedostot käyttäjän määrittelemään lähtöhakemistoon.

Voit muuntaa perus- zip- tai jar-tiedoston suoritettavaksi jar-tiedostoksi millä tahansa Java-alustalla. Vaikka itse purkautuva zip-tiedosto voi luoda vain alustakohtaisia ​​suoritettavia tiedostoja, itse purkautuva purkitiedosto voidaan jakaa ja käyttää missä tahansa Java-alustaa tukevassa alustassa.

Itsepurkautuvan purkitiedoston luominen on yksinkertaista. Tarvitset vain erityisen JAR-manifestitiedoston, Java-pohjaisen purkuohjelman, zip- tai jar-tiedoston, joka sisältää perussisältötiedostot, ja kaikki Java SDK: t purkki apuohjelma.

Luettelotiedosto

Suoritettavien JAR-tiedostojen tekeminen edellyttää ensin luettelotiedostoa nimeltä MANIFEST.MF että META-INF hakemistoon. Luettelotiedosto voi sisältää useita mahdollisia merkintöjä; Tässä tarkoituksessa meidän on kuitenkin määritettävä Java-luokan nimi, joka sisältää Java-pohjaisten purkuohjelmien main () menetelmä:

Pääluokka: ZipSelfExtractor 

Olemme lisänneet luettelotiedoston nimeltä jarmanifesti tämän vihjeen esimerkkikoodiin. Lisätietoja luettelotiedostosta on Jar-tiedostomäärityksessä.

Uuttolaite

Voit tehdä poisto-ohjelman käyttämällä erilaisia ​​lähestymistapoja. Esittelemämme lähestymistapa on yksinkertainen ja suoraviivainen. Ensin purkuohjelma selvittää itsepurkautuvan purkitiedoston nimen. Kun tämä nimi on kädessä, purkija käyttää tavallisia, sisäänrakennettuja Java zip / jar -kirjastoja sisällön purkamiseen arkistosta. Löydät koko lähdekoodin ZipSelfExtractor sisään ZipSelfExtractor.java.

Jar-tiedostonimen hankkiminen purkuohjelmassa voi olla hankalaa. Vaikka purkitiedoston nimi näkyy komentorivillä, nimeä ei välitetä luokan nimille main () menetelmä. Siksi poimintaohjelmassa käytämme seuraavaa koodia tietojen purkamiseen purkimeen osoittavasta URL-osoitteesta:

 yksityinen merkkijono getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); Merkkijono urlStr = urlJar.toString (); int from = "purkki: tiedosto:". pituus (); int = urlStr.indexOf ("! /"); return urlStr.substring (from, to); } 

Huomaa, että getSystemResource () Menetelmän ohitamme myClassName sijasta ZipSelfExtractor.class. Sen avulla voimme muuttaa purkuohjelman nimeä muuttamatta koodin osaa. Asetamme myClassName etsimällä nykyisen luokan nimi.

Seuraavaksi puretaan purkitiedoston nimi. Ensin pyydämme URL-osoitetta luokkatiedostolle, joka sisältää parhaillaan käynnissä olevan luokan (joka on purkuohjelma). Kun meillä on URL, voimme leikata purkitiedoston nimen. Määritelmän mukaan JAR-purkuohjelman URL-osoite noudattaa perusmuotoa:

  1. purkki:, mikä osoittaa, että suoritettava tiedosto toimii jar-tiedoston sisältä
  2. Purkkitiedoston URL-osoite, kuten tiedosto: / C: /temp/test.jar, jota seuraa ! merkki
  3. JAR: n tiedoston sisäisen polun nimi, kuten /ZipSelfExtractor.class

Puraohjelman tapauksessa URL-osoite voi näyttää tältä:

purkki: tiedosto: /home/johnm/test/zipper.jar! /ZipSelfExtractor.class 

Nyt kun meillä on purkitiedoston nimi, voimme suorittaa purkamisen. Puraohjelman sisäosat tukeutuvat sisäänrakennettuihin Java-zip / jar-tiedostojen manipulointikirjastoihin purkamaan arkiston sisältötiedostot. Katso lisätietoja resursseista zip / jar-tiedostojen manipulointikirjastoista.

Helppokäyttöisyyden vuoksi liesituuletin on graafinen Java-sovellus. Sovellus käyttää JFileChooser luokka antaa käyttäjien määrittää kohdehakemiston, johon he haluavat tiedostot puretaan. A ProgressMonitor näyttää uuttoprosessin edistymisen. Jos tiedosto saattaa korvata jo olemassa olevan tiedoston, käyttäjältä kysytään, korvaako olemassa oleva tiedosto vai ei. Lopuksi vakio-valintaikkuna esittelee purkutilastot.

Lopuksi purkuohjelma tarkistaa, ettei se pura tiedostoja, jotka tekevät purkitiedoston itsepurkautuvaksi - luettelotiedoston ja purkimen .luokka tiedosto; ohjelman pitäisi vain purkaa alkuperäinen JAR-sisältö. Nämä kaksi tiedostoa ovat itsepurkautuvan purkitiedoston artefakteja eivätkä ole osa alkuperäisiä, perussisältötiedostoja.

Pakataan purkitiedosto

Nyt kun meillä on luettelotiedosto ja purkuohjelma, voimme rakentaa itsepurkautuvan purkitiedoston. Voimme käyttää manuaalisesti JDK: ita purkki apuohjelma itsepurkautuvan purkitiedoston tekemiseen. Oletetaan esimerkiksi, että sinulla on zip-tiedosto nimeltä myzip.zip, voit tehdä itsestään purkautuvan tiedoston suorittamalla seuraavat vaiheet:

  1. CD hakemistoon, joka sisältää myzip.zip
  2. ladata vetoketju. jar
  3. Pura tiedostot nykyiseen hakemistoon. Olemme tehneet siitä itsepurkautuvan JAR: n:
    java -jar vetoketju. jar 
  4. Kopioi vetoketju. luokka tiedosto tiedostoon ZipSelfExtractor.class
  5. Nimeä uudelleen myzip.zip kuten myzip.jar
  6. Päivittää myzip.jar kanssa jarmanifesti ja ZipSelfExtractor.class tiedostot:
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

Nyt myzip.jar on itsepurkautuva kaikilla alustoilla, jotka sisältävät Java Runtime Environment (JRE) 1.2: n tai uudemman. Suorita itsepurkautuva jar-tiedosto suorittamalla:

java -jar myzip.jar 

Huomaa, että joillakin käyttöympäristöillä voi olla jo määrätty sidoksia, jotta voit suorittaa jar-tiedoston vain napsauttamalla myzip.jar tiedostokuvake, joka suorittaa komentorivivastaavuuden.

Harjoitus lukijalle

Nykyinen ZipSelfExtract ei integroitu hyvin, jos teet itsepurkautuvan JAR-tiedoston olemassa olevasta jar-tiedostosta, joka sisältää luettelotiedoston. Lisää älykkyyttä itsepurkajaan ja luontiohjeisiin, jotta voit käsitellä olemassa olevia jar-tiedostoja, jotka sisältävät luettelotiedostoja.

Vapauta kätesi JAR: sta

Itsepurkautuva jar-tiedosto on hyvä mekanismi tiedostojen jakamiseen alustojen välillä. Itsepurkautuvat JAR-tiedostot on helppo luoda, ja JRE 1.2: n tai uudemman asennuksen vähimmäisvaatimus käyttäjille on kohtuullinen kompromissi alustojen välisen tuen saamiseksi.

Sen sijaan, että luot itsepurkautuvan purkitiedoston manuaalisesti, tutustu ZipAnywhere-sivustoon. ZipAnywhere on monipuolinen postinumero/purkki apuohjelma työkalu kirjoitettu 100% puhtaalla Java. Se on ilmainen GUI-pohjainen työkalu a la WinZip ja voi luoda itsepurkautuvia purkitiedostoja napin painalluksella.

Tohtori Zunhe Steve Jin on henkilöstön ohjelmistoinsinööri Rational Software -ohjelmassa ja ZipAnywhere-lehden kirjoittaja. John D. Mitchell on JavaWorld Tips 'N Tricks -sarakkeen avustava toimittaja. John on myös perustaja ja pääarkkitehti Non, Inc. -yritykselle, joka on teknologisen liiketoiminnan riskienhallinnan konsultointikäytäntö.

Lisätietoja tästä aiheesta

  • Lataa tämän vihjeen lähdetiedostot

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

  • "Java Tip 49How Java Resources from JAR and Zip Archives", John D.Mitchell ja Arthur Choi (JavaWorld)

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

  • "Java Tip 70Luo esineitä Jar-tiedostoista!" John D.Mitchell (JavaWorld)

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

  • Jar-tiedostomääritys

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

  • JAR-komentorivin opas

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

  • ZipAnywhere, GUI-pohjainen itsepurkautuva JAR-luomistyökalu

    //www.geocities.com/zipanywhere

  • Näytä kaikki edelliset Java-vinkkejä ja lähetä oma

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

  • Opettele Java alusta asti JavaWorld 's Java 101 sarake

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

  • Java-asiantuntijat vastaavat vaikeimpiin Java-kysymyksiinsi JavaWorld 's Java-kysymykset ja vastaukset sarake

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

  • Selaa artikkeleita aiheen mukaan JavaWorld 's Ajankohtainen hakemisto

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

  • Puhu Java-foorumillamme

    //forums.idg.net/[email protected]@.ee6b802

  • Ilmottautua JavaWorld 'Ilmaiset viikoittaiset sähköpostiuutiskirjeet

    //www.idg.net/jw-subscribe

  • Löydät runsaasti tietotekniikkaan liittyviä artikkeleita sisarjulkaisuistamme .net

Tämän tarinan, "Java Tip 120: Execute self-extracting JARs", julkaisi alun perin JavaWorld.