Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: anonym 02. 06. 2018, 12:53:54

Název: Java: načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: anonym 02. 06. 2018, 12:53:54
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?
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: Filip Jirsák 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.
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: anonym 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 :-/
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: milan 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.

Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: anonym 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.
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: L. 02. 06. 2018, 17:01:02
A nebude nakonec nejjednodušší, aby si ten test sahal pro ten JAR přímo do Maven repository?
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: anonym 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.
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: Filip Jirsák 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 (http://ant.apache.org/ivy/).
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: tralala 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
Název: Re:Java - Načtení JAR přidaného jako dependency v Mavenu
Přispěvatel: tralala 02. 06. 2018, 22:25:34
https://github.com/shrinkwrap/resolver#resolution-of-artifacts-specified-by-maven-coordinates