Programavimas

„Java“ patarimas 120: vykdykite savaime išsiskiriančius JAR

Jau daugelį metų Philo Katzo sukurtas archyvas „zip“ yra vienas populiariausių failų archyvavimo formatų. „Sun“ yra „Java“ archyvo (JAR) pagrindas. „Sun“ išplėtė zip formato naudojimą įvairiais būdais, kad galėtumėte „Java“ klases supakuoti į archyvo failą. Pridedant JAR manifestas failą, „Java“ vykdymo laikas gali lengvai surasti ir tiesiogiai vykdyti pagrindinę „Java“ programos klasę, esančią „jar“ faile.

Kai kurie užtrauktukas įrankiai gali sukurti savaime išsiskiriantis įvairių platformų, tokių kaip „MS Windows“, archyvai. Naudingumo įrankis sujungia įprastą zip archyvą su ištraukimo programa, kad sugeneruotų naują vykdomąjį failą (exe). Exe failo imtuvams reikia jį paleisti tik norint išgauti originalų ZIP archyvo turinį. Vykdomoji programa vykdo ištraukimo programą, kad išgautų archyvuotus failus į vartotojo nurodytą išvesties katalogą.

Galite konvertuoti pagrindinį ZIP ar jar failą į vykdomąjį jar failą bet kurioje „Java“ platformoje. Nors savaime išsitraukiantis ZIP gali sukurti tik konkrečiai platformai skirtus vykdomuosius failus, savaime išsiskiriantį jar failą galima platinti ir paleisti bet kurioje platformoje, palaikančioje „Java“.

Kurti savaime išsiskiriantį stiklainio failą yra nesudėtinga. Jums tiesiog reikia specialaus JAR aprašo failo, „Java“ pagrįstos ištraukimo programos, „zip“ arba „jar“ failo, kuriame yra pagrindinio turinio failai, ir visų „Java“ SDK stiklainiukas naudingumo programa.

Aprašo byla

Norėdami sukurti vykdomuosius JAR, pirmiausia turite manifesto failą, vadinamą MANIFEST.MF viduje konors META-INF kataloge. Aprašo faile gali būti keli galimi įrašai; tačiau čia mes tiesiog turime nurodyti „Java“ klasės pavadinimą, kuriame yra „Java“ pagrįstos ištraukimo programos pagrindinis () metodas:

Pagrindinė klasė: „ZipSelfExtractor“ 

Pridėjome aprašo failą pavadinimu jarmanifest prie šio patarimo pavyzdžio kodo. Norėdami gauti daugiau informacijos apie manifesto failą, žr. „Jar File Specification“.

Ištraukėjas

Ištraukimo programą galite sukurti naudodami įvairius metodus. Čia pateikiamas požiūris yra paprastas ir paprastas. Pirma, ištraukimo programa išsiaiškina savaime išsiskiriančio failo pavadinimą. Turėdamas šį pavadinimą, ištraukėjas naudoja standartines, įmontuotas „Java zip / jar“ bibliotekas, kad išgautų turinio failus iš archyvo. Galite rasti visą šaltinio kodą „ZipSelfExtractor“ į „ZipSelfExtractor.java“.

Gauti jar failo pavadinimą ištraukimo programoje gali būti keblu. Nors „jar“ failo pavadinimas rodomas komandinėje eilutėje, šis vardas neperduodamas klasės pagrindinis () metodas. Todėl ištraukimo programoje naudojame šį kodą informacijai išgauti iš URL nukreipiančio į ištraukiklį:

 privati ​​eilutė getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); String urlStr = urlJar.toString (); int iš = "stiklainis: failas:". ilgis (); int to = urlStr.indexOf ("! /"); grąžinti urlStr.substring (iš, į); } 

Atkreipkite dėmesį, kad getSystemResource () metodas, kurį mes praeiname „myClassName“ vietoj „ZipSelfExtractor.class“. Tai leidžia mums pakeisti ištraukimo programos pavadinimą, nekeičiant tos kodo dalies. Mes nustatėme „myClassName“ ieškant dabartinės klasės pavadinimo.

Tada išskleidžiame stiklainio failo pavadinimą. Pirma, mes paprašome URL failui, kuriame yra šiuo metu vykdoma klasė (tai yra ištraukimo programa). Gavę URL galime išpjauti stiklainio failo pavadinimą. Pagal apibrėžimą JAR ištraukimo programos URL atitinka pagrindinį formatą:

  1. stiklainis:, kuris rodo, kad vykdomasis failas veikia iš indelio failo vidaus
  2. Indelio failo URL, pvz., byla: / C: /temp/test.jar, po kurio seka ! charakteris
  3. JAR failo vidinio kelio pavadinimas, pvz., /ZipSelfExtractor.class

„Extractor“ programos atveju URL gali atrodyti taip:

stiklainis: failas: /home/johnm/test/zipper.jar! /ZipSelfExtractor.class 

Dabar, kai turime stiklainio failo pavadinimą, galime jį išgauti. Išskleidimo programos žarnos remiasi įmontuotomis „Java“ zip / jar failų manipuliavimo bibliotekomis, kad išpakuotų archyvo turinio failus. Žr. Ištekliai, kad sužinotumėte daugiau apie manipuliavimo failais „zip / jar“ bibliotekas.

Kad būtų patogiau naudoti, ištraukėjas yra grafinė „Java“ programa. Programa naudoja JFileChooser klasę, kad vartotojai galėtų nurodyti paskirties katalogą, į kurį jie nori išgauti failus. A „ProgressMonitor“ parodo gavybos proceso eigą. Jei failas gali perrašyti jau esamą failą, vartotojo klausiama, ar perrašyti esamą failą, ar ne. Apibendrinant, standartiniame dialogo lange pateikiama ištraukimo statistika.

Galiausiai ištraukimo programa patikrina, ar ji neišskiria failų, dėl kurių stiklainio failas išgaunamas savaime - aprašo failas ir ištraukėjas .klasė byla; programa turėtų tiesiog išgauti originalų JAR turinį. Šie du failai yra savaime išsiskiriančio stiklainio failo artefaktai, o ne pirminių, bazinio turinio failų dalis.

Indelio failo pakavimas

Dabar, kai turime manifesto failą ir ištraukimo programą, galime sukurti savaime išsiskiriantį stiklainio failą. Mes galime rankiniu būdu naudoti JDK stiklainiukas naudingumas, norint sukurti savaime išsiskiriantį stiklainio failą. Pavyzdžiui, darant prielaidą, kad turite ZIP failą, vadinamą myzip.zip, galite atlikti šiuos veiksmus, kad iš jo susikurtumėte failą:

  1. cd į katalogą, kuriame yra myzip.zip
  2. parsisiųsti užtrauktukas.jar
  3. Ištraukite failus į dabartinį katalogą. Mes padarėme tai savaime išsiskiriančiu JAR:
    java -jar užtrauktukas.jar 
  4. Nukopijuokite užtrauktukas.klasė failą į „ZipSelfExtractor.class“
  5. Pervardyti myzip.zip kaip myzip.jar
  6. Atnaujinti myzip.jar su jarmanifest ir „ZipSelfExtractor.class“ failai:
    jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

Dabar myzip.jar yra automatiškai išgaunamas visose platformose, kuriose yra „Java Runtime Environment“ (JRE) 1.2 ar naujesnė versija. Norėdami vykdyti savaime išsiskiriantį stiklainio failą, paleiskite:

java -jar myzip.jar 

Atkreipkite dėmesį, kad kai kuriose platformose jau gali būti nustatyti susiejimai, kad jūs galite vykdyti jar failą tiesiog spustelėdami myzip.jar failo piktogramą, kuri paleis komandinės eilutės atitikmenį.

Pratimai skaitytojui

Dabartinis „ZipSelfExtract“ nėra gerai integruotas, jei iš esamo jar failo, kuriame yra manifesto failas, padarote savaime išsitraukiantį JAR. Pridėkite žvalgybos savitraukiklyje ir kūrimo instrukcijose, kad galėtumėte tvarkyti esamus jar failus, kuriuose yra manifestų failai.

Išlaisvinkite ranką nuo JAR

Savaime išsiskiriantis „jar“ failas yra geras kelių platformų failų platinimo mechanizmas. Savaime išsiskiriančius JAR lengva sukurti, o minimalus JRE 1.2 ar naujesnės versijos diegimo vartotojo reikalavimas yra tinkamas kompromisas norint gauti palaikymą tarp platformų.

Užuot rankiniu būdu sukūrę savaime išsiskiriantį stiklainio failą, patikrinkite „ZipAnywhere“. „ZipAnywhere“ yra visavertis užtrauktukas/stiklainiukas įrankis, parašytas 100% gryna „Java“. Tai nemokamas GUI įrankis „a la WinZip“, kuris vienu mygtuko paspaudimu gali sukurti savaime išsiskiriančius stiklainių failus.

Dr. Zunhe Steve Jin yra „Rational Software“ personalo programinės įrangos inžinierius ir „ZipAnywhere“ autorius. John D. Mitchell yra „JavaWorld Tips“ N trikdžių stulpelio redaktorius. Jonas taip pat yra „Non, Inc.“, technologinio verslo rizikos valdymo konsultavimo praktikos, įkūrėjas ir vyriausiasis architektas.

Sužinokite daugiau apie šią temą

  • Atsisiųskite šio patarimo šaltinio failus

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

  • "Java Patarimas 49 Kaip išgauti Java išteklius iš JAR ir Zip archyvų", John D. Mitchell ir Arthur Choi („JavaWorld“)

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

  • "Java Patarimas 70Sukurkite objektus iš" Jar Files "!" Johnas D. Mitchellas („JavaWorld“)

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

  • Indelio failo specifikacija

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

  • JAR komandinės eilutės vadovas

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

  • „ZipAnywhere“, GUI pagrįstas savaime išsitraukiantis JAR kūrimo įrankis

    //www.geocities.com/zipanywhere

  • Peržiūrėti visus ankstesnius „Java“ patarimai ir pateik savo

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

  • Sužinokite „Java“ iš pagrindų „JavaWorld“s „Java 101“ stulpelį

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

  • „Java“ ekspertai atsako į jūsų sunkiausius „Java“ klausimus „JavaWorld“s „Java“ klausimai ir atsakymai stulpelį

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

  • Naršykite straipsnius pagal temą „JavaWorld“s aktuali rodyklė

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

  • Kalbėkite mūsų „Java“ forume

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

  • Prisiregistruokite „JavaWorld“nemokami savaitiniai el. pašto naujienlaiškiai

    //www.idg.net/jw-subscribe

  • Rasite daugybę su IT susijusių straipsnių iš mūsų seserų leidinių .net

Šią istoriją „Java Tip 120: Execute self-extracting JARs“ iš pradžių paskelbė „JavaWorld“.

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