Wofür steht <scope> unter <dependency> in pom.xml?

Antworten:

266

Das <scope>Element kann 6 Werte annehmen: Kompilieren , Bereitstellen , Laufzeit , Test , System und Importieren .

Dieser Bereich wird verwendet, um die Transitivität einer Abhängigkeit zu begrenzen und um den Klassenpfad zu beeinflussen, der für verschiedene Build-Aufgaben verwendet wird.

kompilieren

Dies ist der Standardbereich, der verwendet wird, wenn keiner angegeben ist. Kompilierungsabhängigkeiten sind in allen Klassenpfaden eines Projekts verfügbar. Darüber hinaus werden diese Abhängigkeiten an abhängige Projekte weitergegeben.

unter der Voraussetzung

Dies ähnelt dem Kompilieren, zeigt jedoch an, dass Sie erwarten, dass das JDK oder ein Container die Abhängigkeit zur Laufzeit bereitstellt. Wenn Sie beispielsweise eine Webanwendung für die Java Enterprise Edition erstellen, legen Sie die Abhängigkeit von der Servlet-API und den zugehörigen Java EE-APIs auf den bereitgestellten Bereich fest, da der Webcontainer diese Klassen bereitstellt. Dieser Bereich ist nur im Kompilierungs- und Testklassenpfad verfügbar und nicht transitiv.

Laufzeit

Dieser Bereich gibt an, dass die Abhängigkeit nicht für die Kompilierung, sondern für die Ausführung erforderlich ist. Es befindet sich im Laufzeit- und Testklassenpfad, jedoch nicht im Kompilierungsklassenpfad.

Prüfung

Dieser Bereich gibt an, dass die Abhängigkeit für die normale Verwendung der Anwendung nicht erforderlich ist und nur für die Testkompilierungs- und Ausführungsphase verfügbar ist.

System

Dieser Bereich ähnelt dem bereitgestellten, außer dass Sie die JAR angeben müssen, die ihn explizit enthält. Das Artefakt ist immer verfügbar und wird nicht in einem Repository nachgeschlagen.

Import (nur in Maven 2.0.9 oder höher verfügbar)

Dieser Bereich wird nur in Abhängigkeit vom Typ pom im Abschnitt verwendet. Es gibt an, dass das angegebene POM durch die Abhängigkeiten im Abschnitt dieses POM ersetzt werden soll. Abhängigkeiten mit einem Importbereich tragen nicht dazu bei, die Transitivität einer Abhängigkeit einzuschränken, da sie ersetzt werden.

So beantworten Sie den zweiten Teil Ihrer Frage:

Wie können wir es zum Ausführen von Tests verwenden?

Beachten Sie, dass der testGültigkeitsbereich die Verwendung von Abhängigkeiten nur für die Testphase zulässt.

Lesen Sie die Dokumentation für alle Details.

Ortomala Lokni
quelle
Wenn Sie also "test" verwenden, landet es in der erstellten .jar-Datei?
Märzgrea
1
Was ist, wenn beim Kompilieren und Ausführen eine Abhängigkeit erforderlich ist?
Albin
23

gute Bilder mit Erklärungsbereichen hinzugefügt

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Vaquar Khan
quelle
12

Sechs Abhängigkeitsbereiche:

  • kompilieren : Standardbereich, Classpath für beide verfügbar ist src/mainundsrc/test
  • test : Klassenpfad ist verfügbar fürsrc/test
  • bereitgestellt : wie konform, jedoch zur Laufzeit von JDK oder einem Container bereitgestellt
  • Laufzeit : Nicht für die Kompilierung erforderlich, nur zur Laufzeit erforderlich
  • System : lokal bereitgestellt Klassenpfad bereitstellen
  • importieren : kann nur andere POMs in die importieren <dependencyManagement/>, die nur in Maven 2.0.9 oder höher verfügbar sind
Premraj
quelle
4

Das Scope-Tag wird immer verwendet, um die transitiven Abhängigkeiten und die Verfügbarkeit des JAR auf Klassenpfadebene zu begrenzen. Wenn wir keinen Bereich bereitstellen, funktioniert der Standardbereich, dh Kompilieren .

Mukesh
quelle
11
Kompilieren bedeutet, dass Sie die JAR zum Kompilieren und Ausführen der App benötigen. Bei einer Webanwendung wird die JAR beispielsweise im Verzeichnis WEB-INF / lib abgelegt. Vorausgesetzt, Sie benötigen die JAR zum Kompilieren, aber zur Laufzeit wird bereits eine JAR von der Umgebung bereitgestellt, sodass Sie sie nicht in Ihrer App enthalten müssen. Für eine Web-App bedeutet dies, dass die JAR-Datei nicht im Verzeichnis WEB-INF / lib abgelegt wird. Wenn der App-Server für eine Web-App bereits die JAR (oder deren Funktionalität) bereitstellt, verwenden Sie "bereitgestellt", andernfalls verwenden Sie "kompilieren".
Mukesh
1
Bitte fügen Sie Ihren Kommentar in Ihre Antwort ein
Supun Wijerathne
0

Wenn wir keinen Bereich bereitstellen, lautet der Standardbereich "Kompilieren". Wenn Sie dies bestätigen möchten, gehen Sie einfach zur Registerkarte "Effektiver POM" im Eclipse-Editor. Daraufhin wird "Kompilieren" angezeigt.

Umanath
quelle
OP fragte, was der Bereich ist und tut , ohne den Standardbereich zu finden.
Wouter