Co to jest <scope> w <dependency> w pom.xml?

Odpowiedzi:

266

<scope>Element 6 może mieć wartości: kompilacji , pod warunkiem , wykonawcze , testowe , systemu i import .

Ten zakres służy do ograniczenia przechodniości zależności, a także do zmiany ścieżki klas używanej do różnych zadań kompilacji.

skompilować

Jest to zakres domyślny, używany, jeśli nie określono żadnego. Zależności kompilacji są dostępne we wszystkich ścieżkach klas projektu. Ponadto te zależności są propagowane do zależnych projektów.

opatrzony

Jest to bardzo podobne do kompilacji, ale wskazuje, że oczekujesz, że JDK lub kontener zapewni zależność w czasie wykonywania. Na przykład podczas budowania aplikacji WWW dla Java Enterprise Edition należy ustawić zależność od interfejsu API serwletu i powiązanych interfejsów API Java EE w zakresie podanym, ponieważ kontener WWW udostępnia te klasy. Ten zakres jest dostępny tylko w ścieżce klas kompilacji i testów i nie jest przechodni.

środowisko uruchomieniowe

Ten zakres wskazuje, że zależność nie jest wymagana do kompilacji, ale do wykonania. Jest w środowisku wykonawczym i testuje ścieżki klas, ale nie kompiluje ścieżki klas.

test

Ten zakres wskazuje, że zależność nie jest wymagana do normalnego użytkowania aplikacji i jest dostępna tylko dla faz kompilacji testów i wykonywania.

system

Ten zakres jest podobny do podanego, z tym wyjątkiem, że musisz podać jawny plik JAR, który go zawiera. Artefakt jest zawsze dostępny i nie jest przeszukiwany w repozytorium.

import (dostępne tylko w Maven 2.0.9 lub nowszym)

Ten zakres jest używany tylko w zależności od typu pom w sekcji. Wskazuje, że określony POM należy zastąpić zależnościami w tej sekcji POM. Ponieważ są zastępowane, zależności z zakresem importu nie biorą udziału w ograniczaniu przechodniości zależności.

Aby odpowiedzieć na drugą część pytania:

Jak możemy go użyć do uruchomienia testu?

Zauważ, że testzakres pozwala używać zależności tylko dla fazy testowej.

Przeczytaj dokumentację, aby uzyskać szczegółowe informacje.

Ortomala Lokni
źródło
Więc jeśli użyjesz „test”, to czy skończy się na stworzonym .jar?
markthegrea
1
co jeśli potrzebna jest zależność podczas kompilacji i środowiska wykonawczego?
Albin
23

dodano dobre zdjęcia z wyjaśnieniem zakresów

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Vaquar Khan
źródło
12

Sześć zakresów zależności:

  • compile : domyślny zakres, ścieżka klasy jest dostępna zarówno dla, jak src/mainisrc/test
  • test : ścieżka klasy jest dostępna dlasrc/test
  • pod warunkiem : jak zgodność, ale dostarczone przez JDK lub kontener w czasie wykonywania
  • środowisko wykonawcze : nie jest wymagane do kompilacji, wymaga tylko w czasie wykonywania
  • system : podany lokalnie zapewnia ścieżkę klasy
  • import : można importować tylko inne POM do <dependencyManagement/>, dostępne tylko w Maven 2.0.9 lub nowszej wersji
Premraj
źródło
4

Tag zasięgu jest zawsze używany do ograniczenia zależności przechodnich i dostępności jar na poziomie ścieżki klasy. Jeśli nie podamy żadnego zakresu, domyślny zakres będzie działał, tj . Kompiluj .

Mukesh
źródło
11
Kompilacja oznacza, że ​​potrzebujesz pliku JAR do kompilowania i uruchamiania aplikacji. Przykładowo w przypadku aplikacji WWW plik JAR zostanie umieszczony w katalogu WEB-INF / lib. Podane oznacza, że ​​potrzebujesz pliku JAR do kompilacji, ale w czasie wykonywania istnieje już plik JAR dostarczony przez środowisko, więc nie potrzebujesz go w pakiecie z aplikacją. W przypadku aplikacji internetowej oznacza to, że plik JAR nie zostanie umieszczony w katalogu WEB-INF / lib. W przypadku aplikacji internetowej, jeśli serwer aplikacji już udostępnia plik JAR (lub jego funkcjonalność), użyj „pod warunkiem”, w przeciwnym razie użyj „kompilacji”.
Mukesh,
1
dodaj swój komentarz do swojej odpowiedzi
Supun Wijerathne,
0

Jeśli nie podamy żadnego zakresu, wówczas domyślnym zakresem jest kompilacja. Jeśli chcesz to potwierdzić, po prostu przejdź do zakładki Efektywna pom w edytorze eclipse, wyświetli się jako kompilacja.

Umanath
źródło
OP zapytał, jaki jest zakres i co robi , nie znajdując domyślnego zakresu.
Wouter