Maven avhengighetsomfang

1. Introduksjon

Maven er et av de mest populære byggverktøyene i Java-økosystemet, og en av kjernefunksjonene er avhengighetsstyring.

I denne artikkelen skal vi beskrive og utforske mekanismen som hjelper til med å håndtere transitive avhengigheter i Maven-prosjekter - avhengighetsomfang.

2. Transitiv avhengighet

Enkelt sagt, det er to typer avhengigheter i Maven direkte og transitive.

Direkte avhengigheter er de som eksplisitt er inkludert i prosjektet. Disse kan inkluderes i prosjektet ved hjelp av tagger:

 junit junit 4.12 

Transitive avhengigheter, derimot, er avhengigheter som kreves av våre direkte avhengigheter. Nødvendige transitive avhengigheter blir automatisk inkludert i vårt prosjekt av Maven.

Vi kan liste opp alle avhengigheter inkludert transitive avhengigheter i prosjektet ved hjelp av: mvn avhengighet: tre kommando.

3. Avhengighetsomfang

Avhengighetsomfang kan bidra til å begrense avhengighetens transitivitet, og de endrer klassestien for forskjellige bygde oppgaver. Maven har 6 standardavhengighetsomfang.

Og det er viktig å forstå at hvert omfang - bortsett fra import - har innvirkning på transitive avhengigheter.

3.1. Kompilere

Dette er standardomfanget når det ikke er noe annet omfang.

Avhengigheter med dette omfanget er tilgjengelig på klassestien til prosjektet i alle byggeoppgaver, og de overføres til de avhengige prosjektene.

Enda viktigere, disse avhengighetene er også midlertidige:

 commons-lang commons-lang 2.6 

3.2. sørget for

Dette omfanget brukes til å markere avhengigheter som skal gis på kjøretid av JDK eller en container, derav navnet.

En god brukssak for dette omfanget vil være en webapplikasjon distribuert i en eller annen container, hvor containeren allerede tilbyr noen biblioteker selv.

For eksempel kan en webserver som allerede tilbyr Servlet API ved kjøretid, og i disse prosjektene kan disse avhengighetene defineres med sørget for omfang:

 javax.servlet servlet-api 2.5 levert 

De sørget for avhengigheter er bare tilgjengelig på kompileringstid og i testklassestien til prosjektet; Dessuten er de ikke i overgangsperiode.

3.3. Kjøretid

Avhengighetene med dette omfanget kreves ved kjøretid, men de er ikke nødvendige for utarbeidelse av prosjektkoden. På grunn av dette er avhengigheter merket med kjøretid omfanget vil være til stede i løpetid og testklassevei, men de mangler fra kompileringsklasseveien.

Et godt eksempel på avhengigheter som skal bruke kjøretidsområdet, er en JDBC-driver:

 mysql mysql-connector-java 6.0.6 kjøretid 

3.4. Test

Dette omfanget brukes til å indikere at avhengighet ikke kreves ved standard kjøretid for applikasjonen, men bare brukes til testformål. Test avhengigheter er ikke transitive og er bare til stede for test- og utførelsesstier.

Standard brukstilfelle for dette omfanget er å legge til testbibliotek som JUnit i applikasjonen vår:

 junit junit 4.12 test 

3.5. System

System omfanget er mye likt sørget for omfang. Hovedforskjellen mellom de to omfangene er at system krever at vi direkte peker på en spesifikk krukke på systemet.

Det viktige å huske er at det å bygge prosjektet med system omfangsavhengigheter kan mislykkes på forskjellige maskiner hvis avhengigheter ikke er til stede eller ligger på et annet sted enn det systemPath poeng til:

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

3.6. Import

Dette omfanget ble lagt til i Maven 2.0.9 og den er bare tilgjengelig for avhengighetstypen pom. Vi skal snakke mer om typen avhengighet i fremtidige artikler.

Import indikerer at denne avhengigheten skal erstattes med alle effektive avhengigheter deklarert i sin POM:

 com.baeldung tilpasset prosjekt 1.3.2 pom import 

4. Omfang og transitivitet

Hvert avhengighetsområde påvirker transitive avhengigheter på sin egen måte. Dette betyr at forskjellige transitive avhengigheter kan havne i prosjektet med forskjellige omfang.

Imidlertid avhengigheter med omfang sørget for og test vil aldri bli inkludert i hovedprosjektet.

Deretter:

  • For kompilere omfang, alle avhengigheter med kjøretidsomfang vil bli trukket inn med kjøretid omfang, i prosjektet og alle avhengigheter med kompilere omfanget vil bli trukket inn med kompilere omfang, i prosjektet
  • For sørget for omfang, begge deler kjøretid og kompilere omfang avhengigheter vil bli trukket inn med sørget for omfang, i prosjektet
  • For test omfang, begge deler kjøretid og kompilere omfang transitive avhengigheter vil bli trukket inn med test omfang, i prosjektet
  • For kjøretid omfang, begge deler kjøretid og kompilere omfang transitive avhengigheter vil bli trukket inn med kjøretid omfang, i prosjektet

5. Konklusjon

I denne raske opplæringen fokuserte vi på Maven-avhengighetsomfang, deres formål og detaljene om hvordan de fungerer.

Hvis du vil grave dypere i Maven, er dokumentasjonen et flott sted å starte.


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