Java: jak si udělat něco jako knihovnu?

Roman92

Java: jak si udělat něco jako knihovnu?
« kdy: 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.
« Poslední změna: 19. 12. 2011, 10:46:57 od Petr Krčmář »


Pavel 'TIGER' Růžička

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #1 kdy: 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í.

ava

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #2 kdy: 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

Roman92

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #3 kdy: 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....

Pavel 'TIGER' Růžička

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #4 kdy: 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ě.


Natix

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #5 kdy: 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.

gazda

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #6 kdy: 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?

vyvojar

Re:Java - jak si udělat něco jako jako knihovnu?
« Odpověď #7 kdy: 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.