Java: načtení JAR přidaného jako dependency v Mavenu

anonym

Dělám program, který provádí jisté operace na JAR souborem. Abych otestoval jeho funkčnost, chci v Unit testech načíst cvičné JAR. Nechci ale do testů hardkodovat realtivně nebo absolutně umístění toho JAR na disku, místo toho chci na něj dát obyčejnou dependency v pom.xml a pak si to JAR nějak načtu z classpath. Jak na to?
« Poslední změna: 03. 06. 2018, 18:55:31 od Petr Krčmář »


Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #1 kdy: 02. 06. 2018, 13:14:05 »
JAR si nenačtete z classpath, je to opačně, classpath ukazuje na URL (třeba na JAR). Jedna metoda je, že přes metodu getResource() získáte URL nějakého souboru uvnitř toho JARka, a pak to URL rozdělíte na část k JARu a uvnitř JARu. Přičemž ale URL k souboru uvnitř JAR myslím není standardizované, takže se může v různých implementacích měnit. Druhá možnost je zjistit, zda je příslušné JAR nahrané pomocí třídy URLClassLoader nebo nějakého jejího potomka, a tato třída má přímo metodu getURLs(). Každopádně v obou případech závisíte na implementačních detailech, které se mohou měnit.

anonym

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #2 kdy: 02. 06. 2018, 14:19:32 »
JAR si nenačtete z classpath, je to opačně, classpath ukazuje na URL (třeba na JAR). Jedna metoda je, že přes metodu getResource() získáte URL nějakého souboru uvnitř toho JARka, a pak to URL rozdělíte na část k JARu a uvnitř JARu. Přičemž ale URL k souboru uvnitř JAR myslím není standardizované, takže se může v různých implementacích měnit. Druhá možnost je zjistit, zda je příslušné JAR nahrané pomocí třídy URLClassLoader nebo nějakého jejího potomka, a tato třída má přímo metodu getURLs(). Každopádně v obou případech závisíte na implementačních detailech, které se mohou měnit.

Hmm takže jinými slovy, JARko raději načtu relativně z disku :-/

milan

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #3 kdy: 02. 06. 2018, 15:39:01 »
Nechápu dotaz.

Jestliže má zmíněný JAR sloužit jako knihovna, kterou potřebujete při testování, přidejte si ji jako dependency do pomu. Nemusíte ale řešit classpath, to řeší maven při buildu.

Naopak -- pokud JAR nemá sloužit jako knihovna, ale pouze jako jakýsi "soubor", nad kterým pak vykonáváte nějaké akce, nechápu, proč byste jej chtěl přidávat do pomu. Dejte ho do resources.


anonym

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #4 kdy: 02. 06. 2018, 15:48:39 »
Ten testovaci jar soubor se bude ustavičně měnit, je to samostatný maven projekt. Když ji změním, musí se to jar automaticky aktualizovat.


L.

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #5 kdy: 02. 06. 2018, 17:01:02 »
A nebude nakonec nejjednodušší, aby si ten test sahal pro ten JAR přímo do Maven repository?

anonym

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #6 kdy: 02. 06. 2018, 17:16:20 »
A nebude nakonec nejjednodušší, aby si ten test sahal pro ten JAR přímo do Maven repository?

A to jde nějak jednoduše udělat? Pokud jo, tak by to bylo asi nejlepsi.

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #7 kdy: 02. 06. 2018, 17:39:27 »
A nebude nakonec nejjednodušší, aby si ten test sahal pro ten JAR přímo do Maven repository?

A to jde nějak jednoduše udělat? Pokud jo, tak by to bylo asi nejlepsi.
Pokud ten soubor máte v lokálním repository, najdete to JARko normálně jako soubor na disku v adresáři uvnitř repository podle groupId, arifactId a verze. Ze vzdáleného repository jde stáhnout protokolem HTTP, vesta opět odpovídá uvedeným „souřadnicím“. V případě složitějších operací (např. potřeba najít poslední verzi) se dá embedovat buď Maven, a nebo pro práci s repository bych doporučil spíš Ivy.

tralala

Re:Java - Načtení JAR přidaného jako dependency v Mavenu
« Odpověď #8 kdy: 02. 06. 2018, 22:24:47 »
nacitaj si ten jar programovo v tom teste cez JBoss Shrinkwrap Maven Resolver - das mu Maven koordinaty a on si to natiahne do pamate a mozes nad tym potom robit co chces - ze si to napr. niekam exportnes do tempu, tak nikdy nebudes mat nic commitnute v repe