Maven-függőségi körök
1. Bemutatkozás
A Maven az egyik legnépszerűbb buildeszköz a Java ökoszisztémában, és egyik alapvető jellemzője a függőségkezelés.
Ebben a cikkben leírjuk és feltárjuk azt a mechanizmust, amely segíti a tranzitív függőségek kezelését a Maven-projektekben - függőségi hatókörök.
2. Tranzitív függőség
Egyszerűen fogalmazva, kétféle függőség van Mavenben közvetlen és tranzitív.
A közvetlen függőségek azok, amelyek kifejezetten szerepelnek a projektben. Ezek felhasználhatók a projektbe címkék:
junit junit 4.12
A tranzitív függőségek viszont olyan függőségek, amelyeket közvetlen függőségeink megkövetelnek. A szükséges tranzitív függőségeket Maven automatikusan beépíti projektünkbe.
Az összes függőséget felsorolhatjuk, beleértve a transzitív függőségeket is a projektben: mvn függőség: fa parancs.
3. Függőségi hatókörök
A függőségi hatókörök segíthetnek a függőségek tranzitivitásának korlátozásában, és módosítják a különböző beépített feladatok osztályútvonalát. A Maven 6 alapértelmezett függőségi hatókörrel rendelkezik.
És fontos megérteni, hogy az egyes hatókörök - kivéve import - hatással van a tranzitív függőségekre.
3.1. Összeállítás
Ez az alapértelmezett hatókör, ha más hatókör nincs megadva.
Az ilyen hatókörrel rendelkező függőségek a projekt classpath-ján állnak rendelkezésre az összes build-feladatban, és továbbadódnak a függő projektekhez.
Ennél is fontosabb, hogy ezek a függőségek transzitív jellegűek is:
commons-lang commons-lang 2.6
3.2. Biztosítani
Ezt a hatókört jelölik függőségeket, amelyeket futás közben kell biztosítani a JDK-nak vagy egy tárolónak, innen ered a neve.
Ennek a hatókörnek a megfelelő felhasználási lehetősége lehet egy webes alkalmazás, amelyet néhány tárolóba telepítenek, ahol a tároló már maga is biztosít néhány könyvtárat.
Például egy webkiszolgáló, amely futás közben már biztosítja a Servlet API-t, így a projektünkben ezeket a függőségeket a biztosítani hatókör:
javax.servlet servlet-api 2.5 biztosított
A biztosítani a függőségek csak fordítási időben és a projekt teszt osztályában állnak rendelkezésre; Ráadásul nem transzitívek.
3.3. Futásidő
Az ilyen hatókörrel rendelkező függőségek futás közben szükségesek, de ezekre nincs szükség a projektkód összeállításához. Emiatt a futási idő A hatókör jelen lesz a futásidejű és a teszt osztályúton, de hiányozni fogják az osztály lefordításából.
A futásidejű hatókört használó függőségekre jó példa egy JDBC illesztőprogram:
mysql mysql-connector-java 6.0.6 futásidejű
3.4. Teszt
Ez a hatókör azt jelzi, hogy a függőség nem szükséges az alkalmazás szokásos futásidejénél, hanem csak tesztelési célokra használható. Teszt a függőségek nem tranzitívak, és csak a teszt és a végrehajtás osztályútvonalaknál vannak jelen.
Ennek a hatókörnek a szokásos használati esete olyan tesztkönyvtár hozzáadása, mint a JUnit az alkalmazásunkhoz:
junit junit 4.12 teszt
3.5. Rendszer
Rendszer hatóköre nagyban hasonlít a biztosítani hatálya. A fő különbség e két hatókör között az rendszer megköveteli, hogy mutassunk közvetlenül a rendszer adott üvegére.
Fontos megjegyezni, hogy a projektet fel kell építeni rendszer A hatókör-függőségek meghiúsulhatnak a különböző gépeken, ha a függőségek nincsenek jelen, vagy más helyen találhatók, mint az systemPath mutat valahová:
com.baeldung custom-dependency 1.3.2 rendszer $ {project.basedir} /libs/custom-dependency-1.3.2.jar
3.6. Importálás
Ezt a hatókört a Maven 2.0.9 és a csak a függőség típusához érhető el pom. A jövőbeni cikkekben többet fogunk beszélni a függőség típusáról.
Importálás azt jelzi, hogy ezt a függőséget le kell cserélni a POM-ban deklarált összes tényleges függőségre:
com.baeldung custom-project 1.3.2 pom import
4. Terjedelem és transzitivitás
Minden függőségi kör a maga módján befolyásolja a tranzitív függőségeket. Ez azt jelenti, hogy a különböző transzitív függőségek különböző hatókörűek lehetnek a projektben.
Azonban a hatókörrel való függőségek biztosítani és teszt soha nem kerül be a fő projektbe.
Azután:
- A összeállítani hatókör, minden függőség a futásidejű hatókör be lesz húzva a futási idő hatóköre, a projektben és az összes függőség a összeállítani hatókörét behúzza a összeállítani alkalmazási körét
- A biztosítani hatókör, mindkettő futási idő és összeállítani hatókörfüggőségeket a biztosítani alkalmazási körét
- A teszt hatókör, mindkettő futási idő és összeállítani hatókörű tranzitív függőségek behúzódnak a teszt alkalmazási körét
- A futási idő hatókör, mindkettő futási idő és összeállítani hatókörű tranzitív függőségek a futási idő alkalmazási körét
5. Következtetés
Ebben a gyors bemutatóban a Maven-függőségi körökre, azok céljára és működésük részleteire összpontosítottunk.
Ha mélyebbre akarsz ásni Mavenben, a dokumentáció remek kiindulópont.