Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Roman92 17. 12. 2011, 17:39:37

Název: Java: jak si udělat něco jako knihovnu?
Přispěvatel: Roman92 17. 12. 2011, 17:39:37
Ahoj.
Měl bych dotaz, jak se v javě řeší, když chci mít něco jako knihovnu nebo plugin (nebo tak něco - prostě externí soubor)? Asi něco jako jsou DLL knihovny? Mělo by to fungovat tak, že mám hlavní aplikaci a ta se na něco dotáže té knihovny a počká si na odpověď.

Řekněme, že budu chtít vytvořit něco takového jednoduchého:
Hlavní aplikace má jen jeden button, na který se klikne a tím se zavolá ta externí knihovna, které se něco předá. Bude se ji předávat třeba objekt File (bude to textový soubor). A tato knihovna dělá to, že soubor otevře, prohledá a najde všechny výskyty slova "AHOJ" a hlavní aplikaci vrátí pole s indexy, kde toto hledané slovo začíná. A hlavní aplikace bude čekat na odpověď a potom zobrazí dialog, s vypsanými nalezenými indexy.
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: Pavel 'TIGER' Růžička 17. 12. 2011, 18:16:22
Nevím, oč přesně se pokoušíš, ale vidím v tom už databázi, kde je něco uložené a ve které se hledá ... mno, pokud to má být jen v souboru, tak se naprogramuje externí js, který toto vše provede, výsledky zapíše do souboru a onen soubor ti nadřazená aplikaze zobrazí.
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: ava 17. 12. 2011, 18:36:15
Myslim ze co hledas je JAR, JAVA archive. Jak ho vyrobit je otazka na dlouho, sam jsem ve svete javy zacatecnik, ale v podstate bud pomoci cmdline nastroje jar, nebo si zjisti jak se to dela ve tvem IDE. Pouzije se pak tak, ze si ho nahrajes nekam do classpath, pripadne zmenis classpath tak, aby zahrnovala tvuj JAR, nebo to opet nechas na svem IDE :)

  ava
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: Roman92 17. 12. 2011, 18:59:17
Díky. Ano, myslel jsem JAR soubory. Ale spíše mi šlo o to, jestli jsou nějaké zvláštní pravidla pro to, jak si vytvořit nějaký takový JAR, který bude jakou si knihovnou, která sama bez aplikace nepoběží? A jak tu aplikaci propojit s tím JARem? NEmám s tím zkušenosti a tak jsem chtěl slyšet nějaké rady do začátku.
Nemyslel jsem, že mi sem někdo hodí vytvořenou aplikaci, ale spíše nějak slovně popíše co a jak....
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: Pavel 'TIGER' Růžička 17. 12. 2011, 19:14:10
Je to jednoduché, na začátku si jar ověří, jestli aplikace běží, pokud ne, hodí chybu ..... k čemu to přirovnat? K závislostem balíčkovacího systému? JAR prostě musí být závislý, jak si tu závislost vytvoříš a promakáš je jen na Tobě.
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: Natix 18. 12. 2011, 01:49:01
JAR zjednodušeně řečeno není nic víc než sbírka zkompilovaných tříd zabalených do jednoho ZIP archívu. Sestavení je v NetBeans otázka pár kliknutí a přidání do jiného projektu je taky jednoduché.

Ve chvíli, kdy přidáš do projektu nějakou JARku na classpath, tak jednoduše dostaneš k dispozici všechny v ní obsažené balíky s třídami stejným způsobem, jako bys je vytvořil přímo v projektu. Jediný rozdíl může být v tom, že od nich pravděpodobně nebudou k dispozici celé zdrojáky, jenom hlavičky metod, ale to je asi vedlejší.

Jinak JAR nemusí být nutně jenom knihovna tříd. Můžeš vzít normální spustitelný projekt (ať už commandlajnový nebo s GUI) a ten obdobně zbuildit. Výsledný JAR pak jde buď z konzole nebo poklikáním spustit.
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: gazda 18. 12. 2011, 12:33:38
Roman92, napíšte prosím viac detailov:

(1) akého druhu je vaša "aplikácia", z ktorej chcete volať onen externý modul: dektopový program, servlet, ...

(2) druh závislosti: ako a kedy je "aplikácia" infomovaná o existencíí modulu? - pri štarte, za behu?
Název: Re:Java - jak si udělat něco jako jako knihovnu?
Přispěvatel: vyvojar 18. 12. 2011, 17:33:26
Možná to co hledáš je podědit ClassLoader a překrýt metody na nahrávání tříd, tak aby se hledaly např. jen v určitém adresáři (třeba aplikace/plugins). V tom adresáři mít normálně class soubory, kde by byly definice tříd, které by dědily od nějakého předka třeba Plugin. Ten soubor s tou classou by jsi si v té překryté metodě classloaderu otevřel, nahrál někam do byte bufferu a pak tam je nějaká metoda defineclass nebo tak něco, které když předáš pole bytů, tak to definuje novou classu a můžeš normálně vytvářet její instance atd. Tím by jsi měl v podstatě hotový nějaký svůj plugin systém. Těm plaginům by jsi mohl předávat nějaký objekt reprezentující context té aplikace, pomocí kterého by ten plugin mohl tu aplikaci ovlivňovat.