Maven-afhængighedsomfang

1. Introduktion

Maven er et af de mest populære byggeværktøjer i Java-økosystemet, og en af ​​dets kernefunktioner er afhængighedsstyring.

I denne artikel skal vi beskrive og udforske den mekanisme, der hjælper med at styre transitive afhængigheder i Maven-projekter - afhængighedsomfang.

2. Transitiv afhængighed

Kort sagt, der er to typer afhængigheder i Maven direkte og transitiv.

Direkte afhængigheder er dem, der eksplicit er inkluderet i projektet. Disse kan medtages i projektet ved hjælp af tags:

 junit junit 4.12 

Transitive afhængigheder er derimod afhængigheder, der kræves af vores direkte afhængigheder. Nødvendige transitive afhængigheder inkluderes automatisk i vores projekt af Maven.

Vi kan liste alle afhængigheder inklusive transitive afhængigheder i projektet ved hjælp af: mvn afhængighed: træ kommando.

3. Afhængighedsomfang

Afhængighedsomfang kan hjælpe med at begrænse afhængighedernes transitivitet, og de ændrer klassesti til forskellige opgaver. Maven har 6 standardafhængighedsomfang.

Og det er vigtigt at forstå, at hvert omfang - undtagen importere - har indflydelse på transitive afhængigheder.

3.1. Udarbejde

Dette er standardområdet, når der ikke er noget andet omfang.

Afhængigheder med dette omfang er tilgængelige på projektets klassesti i alle byggeopgaver, og de formidles til de afhængige projekter.

Endnu vigtigere er disse afhængigheder også midlertidige:

 commons-lang commons-lang 2.6 

3.2. Stillet til rådighed

Dette omfang bruges til at markere afhængigheder, der skal leveres ved kørsel af JDK eller en container, deraf navnet.

En god brugssag til dette omfang ville være en webapplikation, der er installeret i en eller anden container, hvor containeren allerede leverer nogle biblioteker selv.

For eksempel kan en webserver, der allerede leverer Servlet API ved kørsel, således i vores projekt disse afhængigheder defineres med stillet til rådighed rækkevidde:

 javax.servlet servlet-api 2.5 leveres 

Det stillet til rådighed afhængigheder er kun tilgængelige på kompileringstidspunktet og i testklassestien til projektet; hvad mere er, de er ikke i overgangsperiode

3.3. Kørselstid

Afhængighederne med dette omfang kræves ved kørsel, men de er ikke nødvendige til kompilering af projektkoden. På grund af dette afhængigheder markeret med runtime omfang vil være til stede i runtime og test classpath, men de mangler i kompilering classpath.

Et godt eksempel på afhængigheder, der skal bruge runtime-omfanget, er en JDBC-driver:

 mysql mysql-connector-java 6.0.6 runtime 

3.4. Prøve

Dette omfang bruges til at indikere, at afhængighed ikke er påkrævet ved applikationens standardkørselstid, men kun bruges til testformål. Prøve afhængigheder er ikke midlertidige og er kun til stede til test- og udførelsesklasser.

Standard brugssagen for dette omfang er at tilføje testbibliotek som JUnit til vores applikation:

 junit junit 4.12 test 

3.5. System

System rækkevidde er meget lig den stillet til rådighed rækkevidde. Den største forskel mellem disse to anvendelsesområder er, at system kræver, at vi direkte peger på en specifik krukke på systemet.

Det vigtige at huske er, at bygge projektet med system omfangsafhængigheder kan mislykkes på forskellige maskiner, hvis afhængigheder ikke er til stede eller er placeret et andet sted end det systemPath peger på:

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

3.6. Importere

Dette omfang blev tilføjet i Maven 2.0.9 og det er kun tilgængeligt for afhængighedstypen pom. Vi vil tale mere om typen af ​​afhængighed i fremtidige artikler.

Importere angiver, at denne afhængighed skal erstattes med alle effektive afhængigheder, der er angivet i sin POM:

 com.baeldung custom-project 1.3.2 pom import 

4. Anvendelsesområde og transitivitet

Hvert afhængighedsområde påvirker transitive afhængigheder på sin egen måde. Det betyder, at forskellige overgangsafhængigheder kan ende i projektet med forskellige anvendelsesområder.

Imidlertid afhængigheder med rækkevidde stillet til rådighed og prøve vil aldrig blive inkluderet i hovedprojektet.

Derefter:

  • Til udarbejde rækkevidde, alle afhængigheder med runtime omfang vil blive trukket ind med runtime omfang, i projektet og alle afhængigheder med udarbejde omfang trækkes ind med udarbejde omfang i projektet
  • Til stillet til rådighed rækkevidde, begge dele runtime og udarbejde omfangsafhængigheder trækkes ind med stillet til rådighed omfang i projektet
  • Til prøve rækkevidde, begge dele runtime og udarbejde rækkevidde transitive afhængigheder vil blive trukket ind med prøve omfang i projektet
  • Til runtime rækkevidde, begge dele runtime og udarbejde rækkevidde transitive afhængigheder vil blive trukket ind med runtime omfang i projektet

5. Konklusion

I denne hurtige vejledning fokuserede vi på Maven-afhængighedsomfang, deres formål og detaljerne i, hvordan de fungerer.

Hvis du vil grave dybere ned i Maven, er dokumentationen et godt sted at starte.