Diskuze: Externí jar mimo IDE
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
To jakým způsobem bude nakládáno s externími knihovnami specifikuješ při buildu projektu. V rámci IDE to nastavíš ve vlastnostech projektu, (v Netbeans je to v Build-Packaging, v IntelliJ to bude nejspíš podobně), když si tam nastavím aby se ty knihovny při buildu kopírovali, tak se mi kromě jar souboru vytvoří ještě i adresář lib, kde jsou ty knihovny a ten jar je vytvořen tak aby o těch knihovnách automaticky věděl.
Při kompilaci mimo IDE, je situace o poznání komplikovanější. Pomocí javac musíš použité knihovny přidat do classpath pomocí parametru -cp nějak takhle:
javac -cp libs\jfreechart.jar ...
a při spouštění aplikace pomocí java opět specifikovat v -cp kde ty knihovny jsou. To je docela nepohodlné, takže se dá vytvořit takzvaný spustitelný jar (to je to co dělá IDE), k tomu je třeba vytvořit manifest soubor manifest.mf, ve kterém se specifikuje ta classpath s těmi knihovnami a další údaje a pak pomocí utilitky jar (součást sdk) se vytvoří ten jar:
jar cfm aplikace.jar manifest.mf ...
Rozhodně by sis měl pročíst <a href="http://docs.oracle.com/javase/tutorial/deployment/jar/index.html">dokumentaci od Oraclu na toto téma</a>, protože je to dost komplikované a specifické téma, kterému ale potřebuješ rozumět, pokud hodláš buildovat aplikaci mimo IDE.
Doporučoval bych použít nějaký buildovací nástroj jako třeba Ant, pokud to máte povolené, napíšeš si jednoduchý build.xml, a pak už jenom dáváš ant compile, ant run, ant jar atd Pěkný tutoriálek jak na to je <a href="https://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html">zde</a>
Díky za odpověď, ale jediný přípustný tvar v jakém má být práce odevzdána je ten, který jsem popsal (ne v jaru...) a bohužel potřebuji využít JFreeCharty. Když jsem přeložil a spustil program tak, jak jsi napsal, tak mi Java z nějakého důvodu hlásila, že nemůže najít metodu main() v hlavní třídě.
A uvádíš tam správně při spouštění tu třídu, ve které je main metoda? Pokud nastavuješ classpath pro tu externí knihovnu, tak pak musíš ale i uvést kde jsou ty přeložené soubory. Například takhle:
java -cp "libs\knihovna.jar;build\" nazev.balicku.Aplikace
main třída je ve třídě Aplikace a ta je v balíčku nazev.balicku, zkompilované class soubory jsou v adresáři build a knihovna.jar je v adresáři libs
Ahoj chtělo to ještě přidat tečku a střední před první knihovnu:
java -cp ".;jcommon-1.0.23.jar;jfreechart-1.0.19.jar" Aplikace
Tečka přidává do classpath aktuální adresář odkud to spouštíš. Já jsem to pomyslně spouštěl z nadřazeného adresáře, proto jsem tam měl místo tečky adresář build
Zobrazeno 6 zpráv z 6.