Rozsahy závislostí Maven

1. Úvod

Maven je jedným z najpopulárnejších nástrojov na zostavenie v ekosystéme Java a jednou z jeho hlavných funkcií je správa závislostí.

V tomto článku sa chystáme popísať a preskúmať mechanizmus, ktorý pomáha pri správe tranzitívnych závislostí v projektoch Maven - rozsahy závislostí.

2. Tranzitívna závislosť

Jednoducho povedané, v Mavene existujú dva typy závislostí priamy a tranzitívny.

Priame závislosti sú tie, ktoré sú výslovne zahrnuté v projekte. Tie je možné zahrnúť do projektu pomocou tagy:

 junit junit 4.12 

Tranzitívne závislosti sú na druhej strane závislosti vyžadované našimi priamymi závislosťami. Maven vyžaduje do nášho projektu automaticky požadované tranzitívne závislosti.

Môžeme uviesť všetky závislosti vrátane tranzitívnych závislostí v projekte pomocou: závislosť mvn: strom príkaz.

3. Rozsahy závislostí

Rozsahy závislostí môžu pomôcť obmedziť tranzitivitu závislostí a upravujú cestu k triede pre rôzne zostavené úlohy. Maven má 6 predvolených rozsahov závislostí.

A je dôležité si uvedomiť, že každý rozsah - okrem dovoz - má vplyv na prechodné závislosti.

3.1. Zostaviť

Toto je predvolený rozsah, ak nie je poskytnutý žiadny iný rozsah.

Závislosti s týmto rozsahom sú k dispozícii na triednej ceste projektu vo všetkých úlohách zostavovania a rozširujú sa na závislé projekty.

Dôležitejšie je, že tieto závislosti sú tiež prechodné:

 commons-lang commons-lang 2.6 

3.2. Za predpokladu

Tento rozsah sa používa na označenie závislosti, ktoré by mali byť poskytované za behu JDK alebo kontajnerom, odtiaľ pochádza aj názov.

Dobrým prípadom použitia pre tento rozsah by bola webová aplikácia nasadená v nejakom kontajneri, kde kontajner už sám poskytuje niektoré knižnice.

Napríklad webový server, ktorý už poskytuje Servlet API za behu, takže v našom projekte môžu byť tieto závislosti definované pomocou za predpokladu rozsah:

 poskytnutý servlet-api javax.servlet 2.5 

The za predpokladu závislosti sú k dispozícii iba v čase kompilácie a v testovacej triede projektu; navyše nie sú tranzitívne.

3.3. Beh programu

Závislosti s týmto rozsahom sú požadované za behu programu, ale nie sú potrebné na zostavenie kódu projektu. Z tohto dôvodu boli závislosti označené symbolom beh programu rozsah bude prítomný za behu a pri testovaní cesty k triede, ale bude chýbať v kompilácii cesty k triede.

Dobrým príkladom závislostí, ktoré by mali používať runtime rozsah, je ovládač JDBC:

 runtime mysql mysql-connector-java 6.0.6 

3.4. Test

Tento rozsah sa používa na označenie, že závislosť sa nevyžaduje pri štandardnom behu aplikácie, ale používa sa iba na testovacie účely. Test závislosti nie sú tranzitívne a sú prítomné iba pre testovacie a exekučné triedy.

Štandardným prípadom použitia pre tento rozsah je pridanie testovacej knižnice ako JUnit do našej aplikácie:

 junit junit 4,12 test 

3.5. Systém

Systém rozsah je veľmi podobný za predpokladu rozsah. Hlavný rozdiel medzi týmito dvoma rozsahmi je v tom systém vyžaduje, aby sme priamo ukazovali na konkrétny jar v systéme.

Je potrebné pamätať na to, že pri budovaní projektu s systém Závislosti rozsahu môžu na rôznych počítačoch zlyhať, ak závislosti nie sú k dispozícii alebo sú umiestnené na inom mieste ako ten systemPath ukazuje na:

 com.baeldung custom-dependency 1.3.2 system $ {project.basedir} /libs/custom-dependency-1.3.2.jar 

3.6. Import

Tento rozsah bol pridaný v Maven 2.0.9 a je k dispozícii iba pre typ závislosti pom. O druhu závislosti si povieme viac v budúcich článkoch.

Import označuje, že táto závislosť by mala byť nahradená všetkými účinnými závislosťami deklarovanými v jej POM:

 com.baeldung custom-project 1.3.2 pom import 

4. Rozsah a prechodnosť

Každý rozsah závislostí ovplyvňuje svojim spôsobom prechodné závislosti. To znamená, že rôzne tranzitívne závislosti môžu v projekte skončiť s rôznymi rozsahmi.

Závislosti s rozsahmi za predpokladu a test nikdy nebudú zahrnuté do hlavného projektu.

Potom:

  • Pre zostaviť rozsah, všetky závislosti s runtime rozsah bude vtiahnutý s beh programu rozsah, v projekte a všetky závislosti s zostaviť rozsah bude vtiahnutý s zostaviť rozsahu v projekte
  • Pre za predpokladu rozsah pôsobnosti, obidva beh programu a zostaviť závislosti závislostí budú stiahnuté pomocou za predpokladu rozsahu v projekte
  • Pre test rozsah pôsobnosti, obidva beh programu a zostaviť prechodné závislosti rozsahu budú stiahnuté pomocou test rozsahu v projekte
  • Pre beh programu rozsah pôsobnosti, obidva beh programu a zostaviť prechodné závislosti rozsahu budú stiahnuté pomocou beh programu rozsahu v projekte

5. Záver

V tomto rýchlom výučbe sme sa zamerali na rozsahy závislostí Maven, ich účel a podrobnosti o ich fungovaní.

Ak sa chcete prehĺbiť do Mavenu, dokumentácia je skvelým miestom, kde začať.


$config[zx-auto] not found$config[zx-overlay] not found