Zdravím,

začínám si hrát s Maven a nemohu prokopnout jeden problém.

Mám projekt X, který je závislý na knihovně Y. Knihovna Y není ideálně napsaná a třídy z ní potřebují mít nějaká konfigurační XML na classpath, ale přitom musí být rozbalená v adresáři. A v tom je můj problém, protože nemohu knihovnu Y jednoduše zabalit jako JAR, dát ji do repozitory a nastavit na ni dependency.

Udělal jsem to, že jsem knihovnu Y rozdělil na 2 části: Y-classes.jar a Y-resources.zip, to vyřešilo problém s dependency v rámci kompilace (Na tu mi stačí jen JAR). Ale když dojde na spuštění testů pro X, které volá Y, tak mám problém, protože Y-resources nejsou dostupné na classpath. Ideálně bych potřeboval Y-resources.zip stáhnout, rozbalit a nastavit na ni nějak classpath a to nevím jak zařídit.

Co už jsem zkoušel:

1) nastavit dependency na zip  - to se stáhne, ale samo se to nerozbalí
2) stáhnout si to ručně, rozbalit a pak natvrdo použít <scope>system</scope> <systemPath>c:\shared</systemPath> - tak to bohužel myslím od verze 2.0.9 nejde, protože měl někdo problém s tím, že se tam dá specifikovat adresář, tak to opravili, aby ta cesta mohla ukazovat pouze na soubor. 3) použil jsem http://maven.apache.org/plugins/maven-surefire-plugin/examples/additional-classpath.html, to zafungovalo, ale jednak se to nedoporucuje pouzivat, a jednak to úplně neřeší celý ten problém, ideálně potřebuji stáhnout ten ZIP z repozitory. 4) koukal jsem na věci jako WAR, Assembly - ale všude se píše, jak vytvořit svoji strukturu výstupu, apod., ale já bych potřeboval spíš jak udělat na takovém balíčku dependency. Zkusil jsem udělat dependency na WAR, ale do classpath se nic nepřidalo. A s assembly jsem se taky nikam nedostal, umím ji vyrobit, ale nastavit na ni dependency, to je asi nesmysl, minimálně mě se to nepodařilo (možná dělám něco špatně) - myslel jsem, že když se tam dělá nějaký descriptor struktury té assembly, tak že by to pak zpětně mohl maven využít a rozbalit si tu assembly a podle toho descriptoru nastavit na jednotlivé adresáře dependency.

Realizaci knihovny Y nemohu změnit, navíc je dosti velká (stovky až tisíce souborů) takže bych potřeboval, aby k rozbalení došlo pouze jednou při inicializaci prostředí a pak už se na ni jen odkazovat.

Jak říkám, teprve s tím začínám, tak v tom plavu a už nevím, kterým směrem hledat, kdyby to bylo v ANTu, tak si to naprogramuji, ale předpokládám, že i v deklarativním Mavenu by tento problém měl být nějak snadno řešitelný. Budu rád, kdybyste mě mohli nějak nasměrovat, jak řešíte, když potřebujete dostat na classpath nějaký resources, které nemohou zůstat v jaru.

Předem díky za nápady

Petr


Odpovedet emailem