Sowohl Plugins als auch Abhängigkeiten sind Jar-Dateien.
Der Unterschied zwischen ihnen besteht jedoch darin, dass der größte Teil der Arbeit in Maven mit Plugins erledigt wird. Die Abhängigkeit ist nur eine Jar-Datei, die beim Ausführen der Aufgaben zum Klassenpfad hinzugefügt wird.
Beispielsweise verwenden Sie ein Compiler-Plugin, um die Java-Dateien zu kompilieren. Sie können das Compiler-Plugin nicht als Abhängigkeit verwenden, da dadurch nur das Plugin zum Klassenpfad hinzugefügt wird und keine Kompilierung ausgelöst wird. Die Jar-Dateien, die beim Kompilieren der Datei zum Klassenpfad hinzugefügt werden sollen, werden als Abhängigkeit angegeben.
Gleiches gilt für Ihr Szenario. Sie müssen das Spring-Plugin verwenden, um einige ausführbare Spring-Dateien auszuführen. [Ich bin nicht sicher, wofür Spring-Plugins verwendet werden. Ich rate hier nur]. Sie benötigen jedoch Abhängigkeiten, um diese ausführbaren Dateien auszuführen. Und Junit ist unter Abhängigkeit markiert, da es vom todsicheren Plugin zur Ausführung von Komponententests verwendet wird.
Wir können also sagen, dass das Plugin eine Jar-Datei ist, die die Aufgabe ausführt, und die Abhängigkeit eine Jar-Datei ist, die die Klassendateien zur Ausführung der Aufgabe bereitstellt.
Hoffe das beantwortet deine Frage!
Maven selbst kann als Küchenmaschine mit vielen verschiedenen Einheiten beschrieben werden, mit denen verschiedene Aufgaben ausgeführt werden können. Diese Einheiten werden Plugins genannt. Zum Beispiel, um Ihre Projekt-Maven-Kompilierungen zu kompilieren
maven-compiler-plugin
, Tests auszuführen -maven-surefire-plugin
und so weiter.Die Abhängigkeit in Bezug auf Maven ist ein Paket von Klassen, von denen Ihr Projekt abhängt. Dies kann JAR, Krieg usw. sein. Wenn Sie beispielsweise einen JUnit-Test schreiben möchten, müssen Sie JUnit-Annotationen und -Klassen verwenden. Daher müssen Sie erklären, dass Ihr Projekt von JUnit abhängt.
quelle
Plugins und Abhängigkeiten sind sehr unterschiedliche Dinge und diese ergänzen sich.
Was sind Plugins?
Plugins führen Aufgaben für einen Maven-Build aus. Diese sind nicht in der Anwendung enthalten.
Dies sind die Herzen von Maven.
Jede von Maven ausgeführte Aufgabe wird von Plugins ausgeführt .
Es gibt zwei Kategorien von Plugins: das
build
und dasreporting
Plugin :<build/>
Element aus dem POM konfiguriert werden .<reporting/
Element> des POM konfiguriert werden .Nach dem Maven Ziel in der Befehlszeile angegeben (zum Beispiel
mvn clean
,mvn clean package
odermvn site
), eine spezifische lifecyle verwendet werden und eine bestimmte Gruppe von Plugins Zielen ausgeführt.Es gibt drei Einbau-Build - Lifecycles:
default
,clean
undsite
. Derdefault
Lebenszyklus übernimmt Ihre Projektbereitstellung, derclean
Lebenszyklus die Projektbereinigung und dersite
Lebenszyklus die Erstellung der Standortdokumentation Ihres Projekts.Ein Plugin-Ziel kann an eine bestimmte Phase eines bestimmten Lebenszyklus gebunden sein.
Zum Beispiel
maven-compiler-plugin
bindet dascompile
Ziel standardmäßig an die Lebenszyklusphase :compile
.Die meisten Maven-Plugins (sowohl Core-Plugins als auch Plugins von Drittanbietern) bevorzugen Konventionen gegenüber Konfigurationen. Daher haben diese ein Plugin-Ziel im Allgemeinen an eine bestimmte Phase gebunden, um ihre Verwendung zu vereinfachen.
Das ist ordentlicher und weniger fehleranfällig:
als :
Welche Abhängigkeiten gibt es?
Abhängigkeiten sind Maven-Artefakte / -Komponenten, die während des Maven-Builds im Klassenpfad erforderlich sind.
Diese können in der Anwendung enthalten sein, müssen aber nicht (siehe
scope
unten).Die meisten Abhängigkeiten sind jar, aber dies können auch andere Arten von Archiven sein: war, ear, test-jar, ejb-client ... oder immer noch POM oder BOM.
In einer pom.xml können Abhängigkeiten an mehreren Stellen angegeben werden: am
<build><dependencies>
Teil, amdependencies management
Teil oder noch in einerplugin
Deklaration ! In der Tat müssen einige Plugins während ihrer Ausführung möglicherweise einige Abhängigkeiten im Klassenpfad aufweisen. Das ist nicht üblich, aber das kann passieren.Hier ist ein Beispiel aus der Dokumentation , das dies zeigt
plugin
unddependency
möglicherweise zusammenarbeitet:In Maven wird auf Abhängigkeiten in einem bestimmten Format verwiesen :
groupId:artifactId:packaging:classifier:version
.Der Klassifizierer (der optional ist) und die Verpackung (
JAR
standardmäßig) werden nicht allgemein angegeben. Das übliche Format in derdependency
Erklärung lautet also eher :groupId:artifactId:version
.Hier ist ein Beispiel für die im
<build><dependencies>
Teil deklarierte Abhängigkeit :Im Gegensatz zu einem Plugin hat eine Abhängigkeit einen Gültigkeitsbereich.
Der Standardbereich ist
compile
. Dies ist der am häufigsten benötigte Bereich (Konvention über Konfiguration erneut).Der
compile
Bereich bedeutet, dass die Abhängigkeit in allen Klassenpfaden eines Projekts verfügbar ist.Der Bereich definiert, in welchen Klassenpfaden die Abhängigkeit hinzugefügt werden soll. Benötigen wir es zum Beispiel zur Kompilierung und Laufzeit oder nur zum Kompilieren und Ausführen von Tests?
Zum Beispiel haben wir Hibernate zuvor als
compile
Abhängigkeit definiert, wie wir sie überall brauchen: Quellkompilierung, Testkompilierung, Laufzeit usw.Wir möchten jedoch nicht, dass Testbibliotheken in der Anwendung gepackt oder im Quellcode referenziert werden . Also geben wir den
test
Umfang für sie an:quelle
webdriver-ie
ich zwei Optionen, entweder alsplugins
oderdependency
, ich habe beide zum Vergleich eingeschlossen und festgestellt, dass beide genau gleich sind.groupId
Der einzige Unterschied war, dass dieplugins
nicht mit einer bestimmten Version geliefert wurden, sonderndependency
mit0.6.685
. Könnten Sie es bitte in Laienbegriffen (in Bezug auf dieses Beispiel) erklären, was der Unterschied ist, welchen Sie wann verwenden sollten? Irgendein Vorschlag?pom.xml
. Eine Sache, die Sie interessieren sollte, ist, dass die Angabe der Abhängigkeitsversion in jeder Maven-Version obligatorisch ist (im aktuellen POM oder im übergeordneten POM, wenn es sich um eine geerbte Abhängigkeit handelt), während seit Maven 3 (wahrscheinlich eine schlechte gute Idee als Feature). Die Angabe der Plugin-Version ist optional. Maven verwendet die letzte Version, die im Release-Repository verfügbar ist, in dem Maven sie findet. (1/2)Wenn Sie aus einem Front-End-Hintergrund wie mir kommen und mit Grunt und npm vertraut sind, stellen Sie sich das so vor:
Zuerst würden Sie sagen, sagen
npm install grunt-contrib-copy --save-dev
. Das ist wie bei Maven<dependency></dependency>
. Es lädt die Dateien herunter, die zum Ausführen einer Build-Aufgabe erforderlich sind.Dann würden Sie die Aufgabe in Gruntfile.js konfigurieren
Das ist wie bei Maven
<plugin>/<plugin>
. Sie teilen dem Build-Tool mit, was mit dem von npm / heruntergeladenen Code zu tun ist<dependency></dependency>
.Natürlich ist dies keine exakte Analogie, aber nah genug, um Ihren Kopf darum zu wickeln.
quelle
Plug-Ins werden zum Hinzufügen von Funktionen zu sich
Maven
selbst verwendet (z. B. Hinzufügen voneclipse
Support oderSpringBoot
Support zuMaven
usw.). Abhängigkeiten werden von Ihrem Quellcode benötigt, um eine Maven-Phase (compile
odertest
zum Beispiel) zu bestehen. Im Falle derJUnit
seit der Testcode ist im Grunde ein Teil Ihrer Code - Basis und rufen SieJUnit
bestimmte Befehle in Testsuiten und diese Befehle werden nicht von einer drittenJava SDK
daherJUnit
muss zum Zeitpunkt vorhanden sein ,Maven
ist in der Testphase , und dies wird durch die Erwähnung behandeltJUnit
als Abhängigkeit in Ihrerpom.xml
Datei.quelle
Maven ist das Herzstück eines Plugin-Ausführungsframeworks - gemäß formaler und standardmäßiger kompakter Definition. Um es klarer zu machen, verwenden Sie die Befehle
maven-install/clean/compile/build etc
zum Erstellen / Ausführen von Jars, die wir manchmal auch manuell ausführen. Die Dinge, die Sie ausführen (oder konfigurieren oder ausführen) möchten, setzen Sie im Grunde genommen in das Abhängigkeitstag von mavens pom und die Antwort, wer diese Abhängigkeiten ausführen wird (für die Einrichtung der Umgebung erforderlich), sind die Plugins.quelle
Einzeilige Antwort - Grundverständnis
Das Plugin ist ein Tool, das Sie bei der Ausführung Ihres Maven-Builds verwenden
Abhängigkeit bedeutet jede Art von Bibliothek, die Sie in Ihrem Code verwenden
quelle
Ein Plugin ist eine Erweiterung von Maven, die zur Herstellung Ihres Artefakts verwendet wird (Maven-Jar-Plugin zum Beispiel wird verwendet, um aus Ihren kompilierten Klassen und Ressourcen ein Jar zu erstellen).
Eine Abhängigkeit ist eine Bibliothek, die von der von Ihnen erstellten Anwendung zum Kompilieren und / oder Testen und / oder zur Laufzeit benötigt wird.
quelle