Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
n5ver
Člen
Avatar
n5ver:18.4.2016 20:17

Ahoj, dělám semestrální práci v IntelliJ, kde mám naimportované knihovny JFreeCharts. Práci ale musíme odevzdat tak, aby v kořenovém adresáři byla složka src (s .java soubory), bin (přeložený program), Build.cmd (přeloží program ze src a .class soubory dá do bin) a Run.cmd (spouští aplikaci ze složky bin). Problém je, že nevím, jak správně přiložit knihovny JFreeCharts, aby šel program správně spustit.

 
Odpovědět
18.4.2016 20:17
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na n5ver
Atrament:18.4.2016 22:21

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/ja­vase/tutorial/de­ployment/jar/in­dex.html">doku­mentaci 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.or­g/manual/tuto­rial-HelloWorldWit­hAnt.html">zde</­a>

 
Nahoru Odpovědět
18.4.2016 22:21
Avatar
n5ver
Člen
Avatar
Odpovídá na Atrament
n5ver:19.4.2016 11:04

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ě.

 
Nahoru Odpovědět
19.4.2016 11:04
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na n5ver
Atrament:19.4.2016 18:02

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

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.4.2016 18:02
Avatar
n5ver
Člen
Avatar
Odpovídá na Atrament
n5ver:21.4.2016 20:59

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
 
Nahoru Odpovědět
21.4.2016 20:59
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na n5ver
Atrament:21.4.2016 22:11

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

 
Nahoru Odpovědět
21.4.2016 22:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.