[Javalist] maven függőség verziók rögzítése

Peter Verhas peter at verhas.com
2013. Nov. 8., P, 10:12:45 CET


Igen, találkoztam már ilyennel. Naná.

Kétfelé kell választani a problémát mielőtt meg lehetne mondani, hogy  
mi a jó megoldás. Amit leírsz ott két, különböző baj lehet.

A program használja A és B függőségeket, A-nak 1.0.0 verzióját, B-nek  
1.2.3 verzióját. Amikor a program elkezdi használni A-nak 1.0.1  
verzióját, akkor tranzitív függőséggel megkapja B-nek 1.2.4 verzióját,  
és ez ütközik a POM fájlban definiált B 1.2.3 függőséggel.

Nem ez a probléma. A probléma

1. A program függőségei rosszul vannak leírva, tudna működni a B 1.2.4  
verzióval is.

2. Az A függőségei vannak rosszul leírva, az A 1.0.1 verziója is tudna  
működni a B 1.2.3 verziójával, de a programod nem tudja használni B  
1.2.4 verzióját.

Az első eset megoldása aránylag egyszerű, hiszen a program POM-ja a  
kezedben van, átírod a használható B verzióját, hogy működjön.  
Természetesen NEM 1.2.4-re írod át, hanem egy intervallumra, amelyik  
megmondja, hogy neked mely verziók a jók.

A 2. eset keményebb. Ilyenkor nem tudod azt mondani, hogy a A függőség  
forrásában átírod a B verzióját, hiszen az A-t nem te fejleszted, és  
ha le is töltöd és csinálsz belőle egy sajátot, az csak workaround.  
Workaround-ból pedig van jobb is.

A saját POM-odban az A függőség megadásakor kizárod a B 1.2.4  
verzióját a tranzitív függőségek közül.

Röviden ennyi, azt hiszem.

Péter

Quoting "Tamás Viktor" <viktor.tamas at gmail.com>:

> Sziasztok,
> talán találkoztatok már olyan jelenséggel Maven projekteknél, hogy egy
> függőség verziójának emelésénél a tranzitív függőségek is változnak és
> esetleg konfliktus lép fel. Ez fordítási vagy futási idejű hibákat is
> eredményezhet.
>
> Tudtok bevett technikákat ennek a kezelésére? Pontosan akarom rögzíteni,
> hogy a projekt milyen verziójú függőségeket használ.
> Van az enforcer plugin, ami eltöri a buildet ha verziókonfliktust észlel.
> Meg lehet adni a függőségek verzióját így: <version>[1.2.3]</version>,
> innentől kezdve a Maven mindenképpen az 1.2.3-as verziót probálja
> használni. Eltöri a build-et ha nem sikerül ezt használni.
> Meg lehet adni explicit a tranzitív függőségeket, lehet nyisszantgatni
> exclude-dal a tranzitív függőségeket, szóval van mozgástér, csak azt nem
> tudom melyik a jó irány.
> Van valami bevett gyakorlatotok erre?
>
> Hallottam olyanról is, hogy bizonyos esetekben a unit tesztek nem
> ugyanolyan verziójú függőségekkel futnak, mint amik végül bekerülnek a
> build-be. Ez nem túl egészséges. Ezt el tudom képzelni, mert test-scope-pal
> behozhatunk olyan függőségeket, ami elmozdítja a tranzitív függőségek
> verzióit. De megerősíteni nem tudom. Találkoztatok már ilyennel?
>
> Üdv,
> V
>





----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.


További információk a(z) Javalist levelezőlistáról