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.