Avatar
n5ver
Člen
Avatar
n5ver:

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. dubna 20:17
Avatar
Atrament
Člen
Avatar
Odpovídá na n5ver
Atrament:

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 dokumentaci od Oraclu na toto téma, 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 zde

 
Nahoru Odpovědět 18. dubna 22:21
Avatar
n5ver
Člen
Avatar
Odpovídá na Atrament
n5ver:

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. dubna 11:04
Avatar
Atrament
Člen
Avatar
Odpovídá na n5ver
Atrament:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 19. dubna 18:02
Avatar
n5ver
Člen
Avatar
Odpovídá na Atrament
n5ver:

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. dubna 20:59
Avatar
Atrament
Člen
Avatar
Odpovídá na n5ver
Atrament:

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