Hlavní navigace

Instalujeme programy v Javě, část 2

Lukáš Zapletal

Programovací jazyk Java pronikl do celého světa. Když už ho na počítači máme nainstalován, musíme také nějaké ty programy vyzkoušet. V druhé polovině tohoto článku vám poradím, jak instalovat, případně sestavovat programy v Javě.

Jazyk Java byl navržen tak, aby byl vývoj v něm snadný, rychlý a zejména efektivní. Když se tvůrci jazyka rozmýšleli mezi dvěma variantami, zda umožnit programátorovi vytvářet soubory tříd do libovolných adresářů, nebo jestli problematice umístění tříd dát pevný řád, zvolili tu přísnější variantu. Podobně tomu bylo i u jiných problémů při tvorbě jazyka (šablony, přetěžování operátorů atd). I když některé věci mohou někoho prudit, v konečném efektu (zejména u rozsáhlejších programů) vyjde najevo, že to byl výborný krok.

Každá třída (pokud ji chceme rozumně používat) musí být v takzvaném balíčku (ve jmenném prostředí). Soubor třídy (tedy soubor .class) ale musí být ve stejném adresáři, jako je balíček třídy. To je důležité! Jen tak může virtuální stroj (JVM) soubor třídy najít a načíst do paměti. Nechť je například třída Test v balíčku cz.root.test. Potom ale soubor třídy (a většinou i zdrojový soubor) musí být v adresáři ./někde/cz/root/test/Test.class. Pokud dodržíme takovéto pravidlo (musíme, kompilátor to ověří), stačí jen virtuálnímu zdroji sdělit, ve kterých adresářích může hledat soubory tříd. Právě k tomu nám slouží systémová proměnná  CLASSPATH.

CLASSPATH 

Příklad A: java -cp .;~/projekty/java/test cz.root.test.Test
JVM se pokusí najít třídu Test v balíčku cz.root.test tak, že nejprve prohledá aktuální adresář (tečka za parametrem -cp). Pokud ji najde (právě díky adresáři ./cz/root/test), volá metodu main a program se spustí. V opačném případě pokračuje v adresáři ~/projekty/java/test a dále ve všech adresářích, případně ZIP/JAR souborech v CLASSPATH. Pokud ani tam neuspěje, vyvolá výjimku a zobrazí ji na konzoli.

Příklad B: java -jar program.jar
JVM načte z archivu JAR takzvaný manifest, ve kterém se dozví, kterou třídu spustit jako první, což ihned učiní. Všechny třídy jsou obsaženy v archivu JAR. Pokud by snad nějaká třída chyběla, JVM bude opět prohledávat všechny hodnoty v CLASSPATH  předtím, než vyvolá výjimku.

Třetí možností, jak program v Javě spustit, je, že si svoje jádro systému nastavíte tak, aby automaticky rozpoznávalo soubory tříd a JAR soubory samo. Jedná se ale o pokročilou techniku a já sám se přiznám, že jsem to nikdy nedělal. Necítil jsem potřebu. V době, kdy čtete tyto řádky, však v diskusním fóru najdete návod, jak na to.

Pokud jste se úspěšně pročetli až sem, máte právě tolik znalostí, které vám stačí ke spuštění snad všech aplikací v Javě. Ale co instalace? Řeknu to takhle: Je to hračka! Projdeme si tedy několik situací, které mohou nastat, a naznačíme si řešení.

Situace 1: automatická instalace. Pokud instalujete pomocí RPM či DEB, pravděpodobně nepoznáte rozdíl od normální aplikace. Javovské programy si většinou před instalací ověří přítomnost JRE a zkontrolují si verzi. Následně mohou také vytvořit spouštěcí skript v shellu a ikonu ve startovací nabídce.

Situace 2: máte soubor JAR. Toto je, řekl bych, nejjednodušší forma instalace, jaká může být. Jediné, co musíte provést, je, někam jej umístit (vhodný je například adresář /usr/local/share) a následně spustit příkazem java -jar název_souboru.jar. Jelikož soubor JAR obsahuje takzvaný manifest, určující, která třída se má spustit jako první, nemusíte se o to starat. Pro snazší spouštění si můžete vytvořit spouštěcí skript či ikonu na ploše.

Situace 3: instalační program. Služeb instalačních programů (setup) typu Install Enywhere využívají hlavně komerční aplikace (například JBuilder), které jsou distribuovány na CD-ROM médiích. Tyto instalátory mají obvykle podobu spustitelného souboru, ten se nejdříve dekomprimuje (většinou včetně vlastní JRE) a poté se spustí grafický průvodce, který je již napsán v Javě. Spustitelné soubory jsou tedy závislé na platformě a musíte si stáhnout ten správný. Nevýhodou je velikost instalátorů, ale u 150MB projektu už zřejmě nárůst o 10MB nevadí.

Situace 4: install.jar nebo install.class. Máte co dělat s instalátorem napsaným v čisté Javě. K jeho chodu již musíte mít funkční JRE. V JAR souboru (resp. na konci class souboru) se nacházejí instalační data, která si instalátor vybalí a nainstaluje. Například projekt JEdit (skvělý editor ve stylu UltraEdit) je takto distribuován. Je tedy nutno instalátor spustit a dále se řídit podle průvodce (grafický nebo textový). V prvním případě to uděláme pomocí java -jar install.jar a ve druhém případě to bude příkaz java -cp . install (bez přípony class!).

Situace 5: máte spoustu class souborů. Vývojář nezabalil class soubory do archivu JAR, protože se jedná pravděpodobně o beta verzi, nebo proto, že se mu nechtělo. S touto situací se pravděpodobně nesetkáte. Umístěte tedy všechny class soubory včetně podadresářů do libovolného adresáře a program spusťte pomocí java -cp /cesta/k/adresáři úplný.název.třídy.s.MetodouMain. Alternativně je můžete zabalit do souboru ZIP a ten potom uvést v CLASSPATH nebo v parametru příkazu java.

Situace 6: kompilace zdrojového kódu. Budeme předpokládat, že si chcete nainstalovat nějaký GPL projekt. GPL projekty mají většinou sestavovací skript Ant (obdoba make). Nainstalujte tedy Apache Ant (nejlépe z binárek k vašemu systému – viz. článek Apache Ant 1.5). Rozbalte aplikaci a proveďte příkaz ant. Po chvíli se vám sestaví kýžený JAR soubor (obvykle do adresáře build). Některé programy umožňují také příkaz ant install, což můžete zkusit. Pokud automatická instalace pomocí Antu není implementována, postupujte pomocí situace 2.

Jsme na konci! Nemohu tvrdit, že se všechny aplikace v Javě instalují těmito způsoby. Může to být nějaká obdoba. Také se připravte na to, že se můžete setkat s konfigurací pomocí textových souborů (většinou XML nebo klíč=hodnota).

Pokud jste si stáhli JDK a chcete začít programovat, stačí vám k tomu nějaký editor, např. emacs nebo vim. Pro zvýšení produktivity doporučuji vyzkoušet některé specializované editory nebo IDE prostředí. Zde je alespoň několik z nich, které jsem vyzkoušel:

Našli jste v článku chybu?
1. 3. 2003 20:59
lzap (neregistrovaný)

pardon, chybicka se vloudila... co se tyka prepinace jar... to je celkem logicke... hezky den!

1. 3. 2003 16:27
Ivo Danihelka (neregistrovaný)

V unixu se nazvy adresaru v CLASSPATH oddeluji dvojteckou. "java -jar balicek.jar" ignoruje nastaveni CLASSPATH (viz. man java) cesty k externim knihovnam ma .jar soubor nastaveny v MANIFEST.MF Pr.: Manifest-Version: 1.0 Main-Class: cz.fidlej.dbs.Main Class-Path: lib/mysql-connector-java-2.0.14-bin.jar lib/ojdbc14.jar