V obou případech (IDE nebo utility jar) v archivu bude vytvořen soubor MANIFEST.MF. Jak jsem již napsal, má smysl číst o dalších vlastnostech souborů JAR. Protože všechno je v dokumentaci psáno velmi dobře, nebudu se zabývat překladem. Pojďme tedy přejít k dalšímu bodu naší cesty prostřednictvím souborů JAR.
Příkazový řádek
Řekl jsem tedy, že hlavní funkcí JAR je obsahovat soubor tříd jako soubory tříd. Nyní musíme pochopit, jak připojit soubory JAR ke třídě run, aby mohla třída run používat třídy ze souboru JAR.
Jak již dobře víte, spuštění Java programu zahrnuje spuštění JVM (pro Windows je to soubor java.exe, pro Unix java) a předání názvu příkazového řádku třídy, kterou chcete spustit. Například pro spuštění třídy První v balíčku edu.javacourse.test nutné v adresáři, ve kterém je adresář umístěn edu / javacourse / test zadejte následující příkaz:
Jak vidíte, jako argument jsme předali celé jméno třídy, kterou chceme spustit. Kromě názvu třídy přijímá JVM poměrně málo parametrů, které umožňují konfigurovat určité vlastnosti JVM. V tomto článku budeme analyzovat velmi důležitý prvek - CLASSPATH - který se používá k připojení souborů JAR.
Nyní projdeme celý cyklus vytváření souboru JAR a jeho připojení bez použití IDE - jsem velmi citlivý na schopnost programátora používat příkazový řádek. Zaprvé to ukazuje, že opravdu chápete podstatu, a za druhé, tato dovednost je prostě velmi užitečná. Například ve stejném Unixu / Linuxu je velmi velké množství práce na příkazovém řádku mnohem pohodlnější a některé produkty obsahují nástroje, které lze spustit z příkazového řádku. Pojďme k tomu.
Vytvořte adresář Javaesson (v zásadě jsme ji již vytvořili v sekci Základní kroky. V tomto adresáři vytvoříme strukturu adresářů Jarlib / edu / javacourse / jar. Pomocí textového editoru vytvořte soubor SayHello.java
Naše adresářová struktura by měla vypadat takto:
Nyní je čas na příkazový řádek. Spustíme příkaz cmd (pokud si nepamatujete - podíváme se do sekce Základní kroky). Přejděte do adresáře JavaLesson / JarLib a v něm nejprve sestavíme náš soubor SayHello.java takový tým
Po úspěšné kompilaci vytvořte soubor JAR pomocí příkazu
Pokud pro vás všechno vyšlo, pak v katalogu JavaLesson / JarLib měl by se zobrazit soubor say.jar.
Nyní napíšeme malou třídu, kterou naše třída použije Sayhello. DŮLEŽITÉ Pro „čistotu experimentu“ vytvořte tuto třídu v adresáři Javaesson. Navrhuji vytvořit třídu bez použití balíčků (ačkoli by to nemělo být pravidlo - v reálných projektech nemusíte vytvářet třídy bez balíčků). Zde je náš soubor PoužijteHello.javakterý bude umístěn v adresáři Javaesson
Věnujte pozornost prvnímu řádku - do něj importujeme třídu Sayhello. Metodou hlavní vytváříme objekt a voláme jeho metodu. Naše adresářová struktura by měla vypadat takto:
Nyní musíme sestavit naši skvělou třídu. Zkusíme tým javac. POZOR Jsme v katalogu Javaesson.
A dostaneme chybu:
Zpráva v tomto případě je poměrně informativní - „UseHello.java:1: chyba: balíček edu.javacourse.jar neexistuje“ a „UseHello.java:6: chyba: nemůže najít symbol“. Nepřipojili jsme naši třídu Sayhello - kompilátor neví, odkud je získat a odkud takový balíček / třída pochází - edu.javacourse.jar.SayHello. Dobře - parafrázují klasiku - „Vaše slovo, soudruhu CLASSPATH.“
Je zřejmé, že musíme kompilátoru říct, že by měl používat nejen ty soubory JAR, které již má - stejné rt.jar - ale také náš soubor JAR. To se provádí pomocí speciální volby při spuštění kompilátoru.
V tomto příkazu jsme přidali řádek -cp JarLib / say.jar. Část -cp říká, že by měl následovat seznam souborů JAR, které obsahují potřebné třídy. Seznam může obsahovat několik souborů oddělených „,“ pro Windows a „:“ pro Unix / Linux. Například pokud potřebuji určit dva soubory - say1.jar a say2.jar - umístěné v adresáři C: / Anton / Knihovny, pak by příkaz (pro Windows) vypadal takto:
Mimochodem, „-cp“ je zkratka pro třídní cesta - Dříve bylo nutné psát tímto způsobem a nyní je to také možné.
Je také důležité si uvědomit, že do CLASSPATH můžete zahrnout nejen soubory JAR - můžete sem přidat cestu k adresáři se soubory .class (opět je možné uvést několik z nich). Pokud bychom nevytvořili soubor JAR say.jar, ale použil kompilovaný soubor SayHello.class z katalogu Jarlib, pak by příkaz vypadal takto:
Můžete se zeptat - proč jsme uvedli cestu pouze k Jarlib, ale ne celý adresář se souborem SayHello.class. Faktem je, protože Protože náš soubor je obsažen v balíčku, musíme zadat cestu k balíčku a je v adresáři Jarlib. Můžete zadat úplnou (spíše než relativní) cestu - takto:
No, podařilo se nám zkompilovat, je čas spustit naši skvělou třídu. Pravděpodobně už víte, že při spuštění musíme také určit náš soubor say.jar a tým by měl vypadat něco takového. POZOR Jsme v katalogu Javaesson.
Ale při spuštění tohoto programu selháme. Toto je zpráva, kterou JVM produkuje:
JVM nemůže najít naši třídu. Jak je to tady, přímo v tomto adresáři? Trik je v tom, že když na příkazovém řádku zadáte CLASSPATH, JVM vezme třídy POUZE z těchto souborů / adresářů. A náš třídní spis Usehello nachází se v adresáři CURRENT, který není specifikován. Tady je taková epidemie. Musíme pověřit JVM, aby také odebral soubory z aktuálního adresáře. Děje se to takto - v CLASSPATH musíte zadat symbol „.“. Toto bude aktuální adresář. Náš tým by měl vypadat takto:
No - teď by se mělo vše podařit a uvidíme nápis HELLO.
Zaměření na CLASSPATH na vás může hrát docela trik. Skutečnost je taková, že JVM používá proměnnou prostředí zvanou CLASSPATH. Pro Windows je nastaven stejným způsobem jako proměnné PATH a JAVA_HOME - udělali jsme to v sekci Instalace JDK. Tato proměnná určuje sadu souborů JAR a adresářů, které bude JVM používat, pokud při spuštění programu NEZARADÍTE CLASSPATH.
Některé programy vytvářejí (nebo aktualizují) proměnnou prostředí CLASSPATH během instalace a nemusí vám nic říkat. A tak začnete svou třídu z příkazového řádku a JVM ji NEVIDUJE. Proč? že dpzkf proměnnou "CLASSPATH" a nemá symbol ".". V tomto případě se to, co jsme již viděli, stane - soubory z aktuálního adresáře se nenačtou. Takže buďte opatrní.
Připojte JAR v NetBeans IDE
Protože V tomto kurzu používám NetBeans k prokázání, pravděpodobně nebude správné neukazovat, jak povolit JAR v tomto prostředí. Jak jsem zmínil, pokud je čas na další IDE, zapíšu je do stejného článku. Ale nemyslím si, že to bude v blízké budoucnosti.
Pokud se podíváte na servisní okno „Projekty“, které je obvykle umístěno vlevo, uvidíte v něm strukturu projektu, která obsahuje sekci „Knihovny“. Vytvořil jsem dva projekty Sayhello a Usehello
V otevřeném souboru PoužijteHello.java úplně první řádek ukazuje, že kompilátor v něm vyvolá chybu - jak již víme, znamená to, že neexistuje požadovaná třída. V zásadě vám IDE umožňují připojit nejen hotové soubory JAR, ale také projekty, ale tuto funkci nebudeme používat (v tomto případě konkrétně). Pro připojení knihovny z projektu Sayhello Nejprve musíme tento projekt sestavit prostřednictvím týmu Build. Výsledek můžeme vidět v katalogu dist. V něm můžeme vidět soubor SayHello.jar. Předvídání otázky - můžete změnit název souboru - abyste soubor vytvořili pod jiným názvem, musíte opravit konfigurační soubor nbproject / project.properties. Najděte v něm možnost se jménem dist.jar A změňte název souboru. Obecně není příliš pohodlné. Takže obvykle ne.
Nyní musíme připojit hotový soubor JAR k našemu druhému projektu Usehello. Existuje několik způsobů, jak toho dosáhnout.
- Klepněte pravým tlačítkem myši na položku „Knihovny“ ve struktuře projektu a vyberte v ní „Přidat JAR / složku“. Po výběru souboru je soubor zobrazen ve větvi „Knihovny“
- Klikněte pravým tlačítkem na projekt Usehello v okně „Projekty“ a v rozbalovací nabídce vyberte položku (obvykle nejnižší) „Vlastnosti“. V otevřeném dialogovém okně vyberte vlevo „Knihovny“ a použijte tlačítko „Přidat JAR / složku“ na kartě „Kompilovat“.
Navrhuji také podívat se na kartu „Spustit“. V něm můžete vidět, že při spuštění budou připojeny ty knihovny, které jsou připojeny při kompilaci zdrojů („Classpath for Compiling Source“).
Můžete to zaokrouhlit, i když samozřejmě proces učení je nekonečný a pravděpodobně najdete spoustu zajímavých informací o použití a tvorbě jar-souborů.
Zdrojový kód pro projekty NetBeans si můžete stáhnout zde. Knihovna v nich musí být připojena samostatně. Takže můžete trénovat. Hodně štěstí.
A nyní nás čeká další článek: Multithreading - první kroky.
Základy Java
Upraveno: 30. listopadu 2008 12:31 |
Upraveno: 1. prosince 2008 12:46 a.m. |