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