Celú sadu tried a prostriedkov aplikácie môžete ľahko zbaliť do archívu Java (JAR). V skutočnosti je to jeden cieľ mať súbory jar. Ďalším je umožniť používateľom jednoduché vykonávanie aplikácií uložených v archíve. Prečo sú potom súbory jar občania druhej triedy vo vesmíre Java - fungujú iba ako archívy - keď môžu byť prvotriedne, hneď vedľa natívnych spustiteľných súborov?
Na vykonanie súboru jar môžete použiť
java
veliteľské
-jar
možnosť. Povedzme napríklad, že máte spustiteľný súbor jar s názvom
myjar.jar
. Pretože je súbor spustiteľný, môžete ho spustiť takto:
java -jar myjar.jar
.
Prípadne Java Runtime Environment (JRE), keď je nainštalovaný na operačnom systéme ako Microsoft Windows, priraďuje súbory jar k JVM, takže na ne môžete dvojitým kliknutím spustiť aplikáciu. Tieto súbory JAR musia byť spustiteľné.
Otázka znie: Ako nastavíte spustiteľný súbor JAR?
Súbor manifestu a položka hlavnej triedy
Vo väčšine súborov JAR je súbor s názvom
MANIFEST.MF
je uložený v adresári s názvom
META-INF
. Vo vnútri tohto súboru sa volala špeciálna položka
Hlavná trieda
hovorí
java -jar
príkaz, ktorá trieda sa má vykonať.
Problém je v tom, že túto špeciálnu položku musíte správne pridať do súboru manifestu sami - musí ísť na určitom mieste a musí mať určitý formát. Niektorí z nás však neradi upravujú konfiguračné súbory.
Nechajte API, nech to urobí za vás
Od verzie Java 1.2 sa volá balík java.util.jar
vám umožní pracovať so súbormi jar. (Poznámka: Nadväzuje na java.util.zip
Konkrétne balík jar vám umožňuje ľahko manipulovať s týmto špeciálnym súborom manifestu prostredníctvom súboru Manifest
trieda.
Poďme napísať program, ktorý používa toto API. Po prvé, tento program musí vedieť o troch veciach:
- JAR, ktorý chceme vytvoriť spustiteľný
- Hlavná trieda, ktorú chceme vykonať (táto trieda musí existovať vo vnútri JAR)
- Názov nového súboru JAR pre náš výstup, pretože by sme nemali súbory jednoducho prepísať
Napíš program
Vyššie uvedený zoznam bude predstavovať argumenty nášho programu. V tejto chvíli si vyberieme vhodný názov pre túto aplikáciu. Ako to robí? MakeJarRunnable
zvuk?
Skontrolujte argumenty k main
Predpokladajme, že náš hlavný vstupný bod je štandard main (Reťazec [])
metóda. Najprv by sme mali skontrolovať argumenty programu tu:
if (args.length! = 3) {System.out.println ("Použitie: MakeJarRunnable" + ""); System.exit (0); }
Venujte pozornosť tomu, ako sa interpretuje zoznam argumentov, pretože je to dôležité pre nasledujúci kód. Poradie a obsah argumentov nie sú vytesané do kameňa; Nezabudnite však primerane upraviť druhý kód, ak ich zmeníte.
Prístup k súboru JAR a jeho manifestu
Najprv musíme vytvoriť niekoľko objektov, ktoré vedia o súboroch JAR a manifestoch:
// Vytvorte objekt JarInputStream a získajte jeho manifest JarInputStream jarIn = nový JarInputStream (nový FileInputStream (args [0])); Manifest manifest = jarIn.getManifest (); if (manifest == null) {// Stane sa to, ak neexistuje žiadny manifest manifest = nový Manifest (); }
Nastavte atribút Hlavná trieda
Dali sme Hlavná trieda
položka v sekcii hlavných atribútov súboru manifestu. Keď získame túto sadu atribútov z objektu manifestu, môžeme nastaviť príslušnú hlavnú triedu. Čo však, ak a Hlavná trieda
atribút už existuje v pôvodnom JAR? Tento program jednoducho vytlačí varovanie a ukončí sa. Možno by sme mohli pridať argument príkazového riadku, ktorý hovorí programu, aby používal novú hodnotu namiesto už existujúcej:
Atribúty a = manifest.getMainAttributes (); Reťazec oldMainClass = a.putValue ("Hlavná trieda", args [1]); // Ak existuje stará hodnota, oznámte to používateľovi a ukončite if (oldMainClass! = Null) {System.out.println ("Varovanie: stará hodnota hlavnej triedy je:" + oldMainClass); System.exit (1); }
Výstup nového JAR
Potrebujeme vytvoriť nový súbor jar, takže musíme použiť JarOutputStream
trieda. Poznámka: Musíme zabezpečiť, aby sme na výstup nepoužívali rovnaký súbor ako na vstup. Prípadne by program mal zvážiť prípad, keď sú dva súbory jar rovnaké, a vyzvať používateľa, aby chcel prepísať originál. Vyhradzujem si to však ako cvičenie pre čitateľa. Ďalej s kódom!
System.out.println ("Zápis do" + args [2] + "..."); JarOutputStream jarOut = nový JarOutputStream (nový FileOutputStream (args [2]), manifest);
Každý vstup zo vstupného JAR do výstupného JAR musíme napísať, takže po ňom iterujte:
// Vytvorte čítaciu vyrovnávaciu pamäť na prenos údajov zo vstupného bajtu [] buf = nový bajt [4096]; // Iterácia záznamov JarEntry záznam; while ((entry = jarIn.getNextJarEntry ())! = null) {// Vylúčte súbor manifestu zo starého JAR, ak ("META-INF / MANIFEST.MF" .equals (entry.getName ())) pokračujú; // Napíš záznam do výstupu JAR jarOut.putNextEntry (záznam); int čítať; while ((read = jarIn.read (buf))! = -1) {jarOut.write (buf, 0, read); } jarOut.closeEntry (); } // Vyprázdnenie a zatvorenie všetkých prúdov jarOut.flush (); jarOut.close (); jarIn.close ();
Kompletný program
Tento kód samozrejme musíme umiestniť do a hlavný
metódou vo vnútri triedy as vhodnou sadou príkazov na import. Sekcia Zdroje poskytuje kompletný program.
Príklad použitia
Poďme tento program použiť s príkladom. Predpokladajme, že máte aplikáciu, ktorej hlavný vstupný bod je v triede s názvom HelloRunnableWorld
. (Toto je celý názov triedy.) Predpokladajme tiež, že ste vytvorili JAR s názvom myjar.jar
, ktorá obsahuje celú aplikáciu. Bež MakeJarRunnable
v tomto súbore jar takto:
java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar
Ako už bolo spomenuté, opäť si všimnite, ako objednávam zoznam argumentov. Ak objednávku zabudnete, spustite tento program bez argumentov a on odpovie správou o použití.
Skúste spustiť
java -jar
povel na
myjar.jar
a potom ďalej
myjar_r.jar
. Všimnite si rozdiel! Potom to preskúmajte súbory manifestu (
META-INF / MANIFEST.MF
) v každom JAR. (Oba JAR nájdete v
zdrojový kód
.)
Tu je návrh: Skúste vytvoriť MakeJarRunnable
program do spustiteľného súboru JAR!
Bežte s tým
Spustenie súboru JAR dvojitým kliknutím alebo použitím jednoduchého príkazu je vždy pohodlnejšie, ako keby ste ho museli zahrnúť do svojej cesty triedy a spustiť konkrétnu hlavnú triedu. Aby ste tomu dosiahli, špecifikácia JAR poskytuje a Hlavná trieda
pre súbor manifestu JAR. Program, ktorý tu uvádzam, vám umožňuje využiť Java JAR API na ľahkú manipuláciu s týmto atribútom a na spustenie vašich súborov JAR.
Získajte viac informácií o tejto téme
- Stiahnite si zdrojový kód a súbory JAR pre tento tip
//images.techhive.com/downloads/idge/imported/article/jvw/2002/05/makejarrunnable.zip
- „Java Tip 120Execute Self-Extracting JARs,“ Z. Steve Jin a John D. Mitchell (JavaWorld, Novembra 2001)
//www.javaworld.com/javaworld/javatips/jw-javatip120.html
- Špecifikácia súboru JAR
//java.sun.com/j2se/1.3/docs/guide/jar/jar.html
- jar — Nástroj Java Archive Tool
//java.sun.com/j2se/1.3/docs/tooldocs/win32/jar.html
- Zobraziť všetky predchádzajúce Tipy pre Java a odovzdať svoje vlastné
//www.javaworld.com/javatips/jw-javatips.index.html
- Naučte sa Java od základu v JavaWorld 's Java 101 stĺpec
//www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html
- Odborníci na jazyk Java odpovedajú na vaše najťažšie otázky týkajúce sa jazyka Java v jazyku JavaWorld 's Java Q&A stĺpec
//www.javaworld.com/javaworld/javaqa/javaqa-index.html
- Prejdite si Core Java časť JavaWorld 's Aktuálny index
//www.javaworld.com/channel_content/jw-core-index.shtml
- Zostaňte na vrchole našich Tipy 'N triky prihlásením sa na odber JavaWorld 's bezplatné týždenné e-mailové informačné vestníky
//www.javaworld.com/subscribe
- Naučte sa základy jazyka Java na strane klienta v JavaWorld 's Java začiatočník diskusia. Medzi kľúčové témy patrí jazyk Java, Java Virtual Machine, API a vývojové nástroje
//forums.idg.net/webx?50@@.ee6b804
- Množstvo článkov týkajúcich sa IT z našich sesterských publikácií nájdete na .net
Tento príbeh, „Java Tip 127: See JAR run“, pôvodne publikoval JavaWorld.