Hlavní navigace

Instalujeme programy v Javě, část 2

Lukáš Zapletal 28. 2. 2003

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












Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?