Ohjelmointi

Java Tip 127: Katso JAR-ajo

Voit helposti pakata sovelluksen koko luokan ja resurssit Java-arkistoon (JAR). Itse asiassa se on yksi tavoite saada jar-tiedostoja. Toinen on antaa käyttäjien suorittaa helposti arkistoon tallennettu sovellus. Miksi sitten jar-tiedostot ovat toisen luokan kansalaisia ​​Java-universumissa - toimivat vain arkistoina -, kun he voivat olla ensiluokkaisia, natiivien suoritettavien tiedostojen rinnalla?

Suorita purkitiedosto käyttämällä

java

komento

-jar

vaihtoehto. Oletetaan esimerkiksi, että sinulla on ajettava purkitiedosto nimeltä

myjar.jar

. Koska tiedosto on ajettava, voit suorittaa sen seuraavasti:

java -jar myjar.jar

.

Vaihtoehtoisesti Java Runtime Environment (JRE), kun se on asennettu käyttöjärjestelmään, kuten Microsoft Windows, yhdistää purkitiedostot JVM: ään, jotta voit kaksoisnapsauttaa niitä suorittaaksesi sovelluksen. Näiden JAR-arvojen on oltava ajettavissa.

Kysymys kuuluu: Kuinka teet JARista ajettavan?

Luettelotiedosto ja Main-luokan merkintä

Useimpien JAR-tiedostojen sisällä tiedosto nimeltä

MANIFEST.MF

on tallennettu hakemistoon nimeltä

META-INF

. Tiedoston sisällä kutsuttiin erityinen merkintä

Pääluokka

kertoo

java -jar

komento suoritettava luokka.

Ongelmana on, että sinun on lisättävä tämä erityinen merkintä itse manifestitiedostoon oikein - sen on mentävä tietyssä paikassa ja sen on oltava tietyssä muodossa. Jotkut meistä eivät kuitenkaan pidä kokoonpanotiedostojen muokkaamisesta.

Anna API: n tehdä se puolestasi

Java 1.2: sta lähtien paketti nimeltä java.util.jar on antanut sinun työskennellä purkitiedostojen kanssa. (Huomaa: Se perustuu java.util.zip .) Erityisesti jar-paketin avulla voit helposti käsitellä kyseistä erityistä manifestitiedostoa Selvä luokassa.

Kirjoitetaan ohjelma, joka käyttää tätä API: ta. Ensinnäkin tämän ohjelman on tiedettävä kolmesta asiasta:

  1. JAR, jonka haluamme tehdä ajettavaksi
  2. Pääluokka, jonka haluamme suorittaa (tämän luokan on oltava JAR: n sisällä)
  3. Uuden JAR: n nimi tuotoksellemme, koska meidän ei pitäisi yksinkertaisesti korvata tiedostoja

Kirjoita ohjelma

Yllä oleva luettelo muodostaa ohjelmamme perustelut. Valitse tässä vaiheessa sopiva nimi tälle sovellukselle. Kuinka TeeJarRunnable ääni?

Tarkista tärkeimmät argumentit

Oletetaan, että pääsisäänkäyntikohta on vakio main (merkkijono []) menetelmä. Meidän pitäisi ensin tarkistaa ohjelman argumentit täältä:

 if (args.pituus! = 3) {System.out.println ("Käyttö: MakeJarRunnable" + ""); System.exit (0); } 

Kiinnitä huomiota argumenttiluettelon tulkintaan, koska se on tärkeää seuraavan koodin kannalta. Argumenttijärjestystä ja sisältöä ei ole kivitetty; muista kuitenkin muokata toista koodia asianmukaisesti, jos muutat niitä.

Avaa JAR ja sen luettelotiedosto

Ensinnäkin meidän on luotava joitain objekteja, jotka tuntevat JAR: n ja manifestitiedostot:

 // Luo JarInputStream-objekti ja hanki sen luettelo JarInputStream jarIn = new JarInputStream (new FileInputStream (args [0])); Manifest manifest = jarIn.getManifest (); if (manifest == null) {// Tämä tapahtuu, jos manifestia ei ole manifest = new Manifest (); } 

Aseta Main-class-attribuutti

Laitamme Pääluokka merkintä luettelotiedoston päämääritteet-osiossa. Kun olemme saaneet tämän attribuuttisarjan manifest-objektista, voimme asettaa sopivan pääluokan. Entä jos a Pääluokka attribuutti on jo olemassa alkuperäisessä JAR: ssa? Tämä ohjelma yksinkertaisesti tulostaa varoituksen ja poistuu. Ehkä voisimme lisätä komentoriviargumentin, joka kehottaa ohjelmaa käyttämään uutta arvoa aiemmin luodun arvon sijaan:

 Attribuutit a = manifest.getMainAttributes (); Merkkijono oldMainClass = a.putValue ("Main-Class", argumentit [1]); // Jos vanha arvo on olemassa, kerro käyttäjälle ja poistu, jos (oldMainClass! = Null) {System.out.println ("Varoitus: vanha pääluokan arvo on:" + oldMainClass); System.exit (1); } 

Tulosta uusi JAR

Meidän on luotava uusi purkitiedosto, joten meidän on käytettävä JarOutputStream luokassa. Huomaa: Meidän on varmistettava, ettemme käytä samaa tiedostoa lähtöön kuin syötteeseen. Vaihtoehtoisesti, ehkä ohjelman pitäisi harkita tapausta, jossa kaksi purkkitiedostoa ovat samat, ja kehottaa käyttäjää, jos hän haluaa korvata alkuperäisen. Varaan tämän kuitenkin harjoitukseksi lukijalle. Päällä koodilla!

 System.out.println ("Kirjoitus kohteeseen" + args [2] + "..."); JarOutputStream jarOut = uusi JarOutputStream (uusi FileOutputStream (argumentit [2]), manifest); 

Meidän on kirjoitettava kaikki merkinnät syötteestä JAR lähtöön JAR, joten toista merkinnät:

 // Luo lukupuskuri datan siirtämiseksi syöttötavusta [] buf = uusi tavu [4096]; // Toista merkinnät JarEntry-merkintä; while ((entry = jarIn.getNextJarEntry ())! = null) {// Sulje luettelotiedosto pois vanhasta JAR: sta, jos ("META-INF / MANIFEST.MF" .equals (entry.getName ())) jatkuu; // Kirjoita merkintä lähtöön JAR jarOut.putNextEntry (entry); int lukea; while ((lue = jarIn.read (buf))! = -1) {jarOut.write (buf, 0, lue); } jarOut.closeEntry (); } // Huuhtele ja sulje kaikki virrat jarOut.flush (); jarOut.close (); jarIn.close (); 

Täydellinen ohjelma

Tietenkin meidän on sijoitettava tämä koodi a: n sisään tärkein menetelmällä luokan sisällä ja sopivalla tuontilausekesarjalla. Resurssit-osio tarjoaa koko ohjelman.

Käyttöesimerkki

Laitetaan tämä ohjelma käytettäväksi esimerkin kanssa. Oletetaan, että sinulla on sovellus, jonka pääsisääntulopiste on luokassa nimeltä HeiRunnableWorld. (Tämä on koko luokan nimi.) Oletetaan myös, että olet luonut JAR-kutsun myjar.jar, joka sisältää koko sovelluksen. Juosta TeeJarRunnable tällä purkitiedostolla näin:

 java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar 

Jälleen, kuten aiemmin mainittiin, huomaa kuinka tilaan argumenttiluettelon. Jos unohdat tilauksen, suorita vain tämä ohjelma ilman argumentteja ja se vastaa käyttöviestillä.

Yritä ajaa

java -jar

komento päälle

myjar.jar

ja sitten eteenpäin

myjar_r.jar

. Huomaa ero! Kun olet tehnyt sen, tutustu luettelotiedostoihin (

META-INF / MANIFEST.MF

) jokaisessa JARissa. (Löydät molemmat JAR-tiedostot

lähdekoodi

.)

Tässä on ehdotus: Yritä tehdä TeeJarRunnable ohjelma juoksevaksi JAR!

Suorita sen kanssa

JAR: n suorittaminen kaksoisnapsauttamalla sitä tai käyttämällä yksinkertaista komentoa on aina helpompaa kuin sisällyttää se luokkatiedeesi ja suorittaa tietty pääryhmä. Tämän helpottamiseksi JAR-määrityksessä on a Pääluokka attribuutti JAR: n luettelotiedostolle. Tässä esittämäni ohjelman avulla voit käyttää Javan JAR-sovellusliittymää manipuloida tätä attribuuttia helposti ja tehdä JAR-tiedostoistasi ajettavia.

Shawn Silverman on tällä hetkellä jatko-opiskelija Kanadan Manitoban yliopiston sähkö- ja tietotekniikan osastolla. Hän alkoi työskennellä Java-palvelun kanssa vuoden 1996 puolivälissä, ja on käyttänyt sitä melkein yksinomaan siitä lähtien. Hänen nykyisiin kiinnostuksen kohteisiinsa kuuluvat sähkökenttien ja nesteiden simulointi, virheenkorjauskoodit ja hienojen GUI-temppujen (graafinen käyttöliittymä) toteuttaminen. Shawn opettaa myös kolmannen vuoden ohjelmistosuunnittelukurssin yliopistonsa tietokonetekniikan osastolla.

Lisätietoja tästä aiheesta

  • Lataa tämän vihjeen lähdekoodi ja JAR-tiedostot

    //images.techhive.com/downloads/idge/imported/article/jvw/2002/05/makejarrunnable.zip

  • "Java Tip 120Execute Self-Extracting JARs", Z. Steve Jin ja John D. Mitchell (JavaWorld, Marraskuu 2001)

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

  • JAR-tiedostomäärittely

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

  • jar - Java-arkistotyökalu

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

  • 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 Java-ydin osa JavaWorld 's Ajankohtainen hakemisto

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

  • Pysy ajan tasalla Vihjeiden N temppuja tilaamalla JavaWorld 'Ilmaiset viikoittaiset sähköpostiuutiskirjeet

    //www.javaworld.com/subscribe

  • Opi asiakaspuolen Java-kielen perusteet sisään JavaWorld 's Java-aloittelija keskustelu. Keskeisiä aiheita ovat Java-kieli, Java-virtuaalikone, sovellusliittymät ja kehitystyökalut

    //forums.idg.net/webx?50@@.ee6b804

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

Tämän tarinan "Java Tip 127: See JAR run" julkaisi alun perin JavaWorld.

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