Maven -

Petr Ciochoň Petr.Ciochon na unicorn.eu
Pátek Listopad 13 09:22:31 CET 2009


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





Další informace o konferenci Konference