Java a "linkování" knihoven

i

Java a "linkování" knihoven
« kdy: 02. 03. 2014, 19:41:12 »
Ahoj,

Odpovědi na tuto otázku v C znám, jak to ale je v Javě?
Tvořím prográmek, který bude využívat knihovnu dostupnou ve zdrojich. Tato knihovna není součástí JRE.

Vím že v C si ji mohu buď staticky přilinkovat a distribuovat jen binárku, nebo dynamicky přilinkovat a nějak zajistit aby byla i na cílovém stroji.

Jak se to ale správně řeší v javě?
Pokud mám na výběr, tak bych raději staticky linkovanou variantu a pokud možno distribuovat jediný JAR.
Jak se toto správně dělá v netbeans ?

Dík předem za odpovědi.


Re:Java a "linkování" knihoven
« Odpověď #1 kdy: 02. 03. 2014, 20:59:23 »
V Javě máte množinu tříd, které jsou dostupné na classpath, a z nich určíte jednu hlavní třídu, jejíž statická metoda main se při startu spustí. Aplikační classpath se při startu apliakce konfiguruje parametrem -cp příkazu java - předává se mu seznam, jednotlivé položky jsou buď adresář (ve kterém jsou v podadresářích podle balíčků přímo .class soubory na disku) nebo soubor .jar (který obsahuje .class soubory uvnitř). Případně je možné spustit aplikaci příkazem java -jar soubor.jar, pak je na aplikační classpath spouštěný soubor a další položky odkazované v manifestu toho JAR souboru, v manifestu může být určená i hlavní třída.

Každopádně doporučuji si o tom něco přečíst, není to věc, která by se dala vysvětlit jedním komentářem.

i

Re:Java a "linkování" knihoven
« Odpověď #2 kdy: 02. 03. 2014, 21:41:52 »
Jak se dostat ke knihovně kterou už mám v cílovém systému asi tuším, to je ale spíš podobné tomu dynamickému linkování.
existje ale nějaký "java good practices" (Česky netuším ), jak to udělat jako statické linkování?

Statické linkování znamená že chci tu knihovnu mít v jediném jar včetně té vlastní aplikace.

Waseihou

Re:Java a "linkování" knihoven
« Odpověď #3 kdy: 02. 03. 2014, 21:47:22 »
Do instalátoru přihoď rovnou celé jvm a udělej baťák na spouštění. U jakékoliv serióznější aplikace stejně chceš mít pod kontrolou na jaké verzi jvm to běží :D

Petr Šmíd

Re:Java a "linkování" knihoven
« Odpověď #4 kdy: 02. 03. 2014, 21:48:02 »
Ty jar knihovny jsou jen přejmenované zipy - tedy stačí obsah knihoven rozbalit a přidat do tvého jaru. Pak budeš mít pouze jeden jar.


perceptron

Re:Java a "linkování" knihoven
« Odpověď #5 kdy: 02. 03. 2014, 22:02:28 »
staticke linkovanie v jave neexistuje

je mozne vyrobit jar tym, ze, vulgarne povedane, rozbalite jary zavislosti do jedneho spolocneho adresara, a ten cely adresar zase zabalite, takze budete mat v jednom zipe/jare napr. org/apache/commons/logging/Logger.class a cz/aplikace/fejsbuk/Main.class

nevulgarne povedane, chcete zrejme maven-assembly-plugin

neruda

Re:Java a "linkování" knihoven
« Odpověď #6 kdy: 03. 03. 2014, 10:53:20 »
jar je zip ....
hledas maven assembly plugin, ktery vsechny zavislosti nasype do jednoho jarka,
nebo i proguard umi to same.
Ale neni to 100% pouzitelne.
Nektere jarka mohou mit prekryvajici se informace v manifetu pod MET-INF, muze dojit pripadne i ke kolizi resources, jako napr /log4j.properties atd.

kuka

Re:Java a "linkování" knihoven
« Odpověď #7 kdy: 03. 03. 2014, 11:52:39 »
Do instalátoru přihoď rovnou celé jvm a udělej baťák na spouštění. U jakékoliv serióznější aplikace stejně chceš mít pod kontrolou na jaké verzi jvm to běží :D

Tak určitě, každý serióznější zákazník stejně chce používat JVM z nějakého proprietárního instalátoru.

neruda

Re:Java a "linkování" knihoven
« Odpověď #8 kdy: 03. 03. 2014, 13:07:22 »
Do instalátoru přihoď rovnou celé jvm a udělej baťák na spouštění. U jakékoliv serióznější aplikace stejně chceš mít pod kontrolou na jaké verzi jvm to běží :D

no ono javafxpackager, ktery je soucasti jdk8 presne to dela, akorat se jvm neinsraluje, jenom primo z baliku programu spousti ...

Tak určitě, každý serióznější zákazník stejně chce používat JVM z nějakého proprietárního instalátoru.

neruda

Re:Java a "linkování" knihoven
« Odpověď #9 kdy: 03. 03. 2014, 13:08:56 »
Do instalátoru přihoď rovnou celé jvm a udělej baťák na spouštění. U jakékoliv serióznější aplikace stejně chceš mít pod kontrolou na jaké verzi jvm to běží :D

no ono javafxpackager, ktery je soucasti jdk8 presne to dela, akorat se jvm neinsraluje, jenom primo z baliku programu spousti ...

Tak určitě, každý serióznější zákazník stejně chce používat JVM z nějakého proprietárního instalátoru.

no ono javafxpackager, ktery je soucasti jdk8 presne to dela, akorat se jvm neinstaluje, jenom primo z baliku programu spousti ...