Maven: Lebenszyklus vs. Phase vs. Plugin vs Ziel
Relativ neue Entwickler hier, obwohl ich ' ve wurde unter Verwendung es für eine Weile, ich bin in der Hoffnung zu erstarren, mein Maven-Grundlagen. Teil mein problem ist, dass ich keine Erfahrung mit Ant, das scheint zu sein, von wo aus viele Erklärungen stammen. Ich habe Lesen und beobachten tutorials, und ich höre immer wieder die gleichen Begriffe:
- Lifecycle
- Phase
- Plugin
- Ziel
Von dem, was ich gelernt habe, es scheint, dass der Lebenszyklus ist der breiteste von den Haufen, und besteht aus (oder abgeschlossen) Phasen, plugins, und/oder Ziele.
Frage: Könnten Sie irgendein info auf, wie diese Begriffe in Zusammenhang stehen, und die häufigsten Beispiele?
Deutlicher und grundlegender, desto besser!
InformationsquelleAutor der Frage Jeff Levine | 2014-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Drejc Antwort ist nicht richtig, in seiner Gesamtheit.
Insbesondere:
[Strikethroughs falsche Anweisungen von mir.]
Einen Maven lifecycle ist eine (abstrakte) Konzept deckt alle Schritte (oder besser: alle die Schritte, die das Maven-Designer beschlossen, support) , die zu erwarten sind, die in ein Projekt-Entwicklung-Leben. Diese Schritte (oder Phasen) sind genannt Phasen in Maven Terminologie.
Einen Maven-plugin ist ein container für/Anbieter von Ziele. Code implementiert Ziele ist das eigentliche Arbeitspferd. (Maven in seinem Kern selbst ist nur die Verwaltung von plugins und Umsetzung von Zielen). Die einzelnen plugins können Ziele zugeordnet werden/angebunden werden an eine der lifecycle-Phasen.
Beim aufrufen
mvn <phase>
Maven übergibt alle Phasen (jedes mal) und führt alle Ziele (geliefert durch Plugin) , die gebunden wurden, um eine der Phasen vor und bis zu (und einschließlich) der jeweiligen phase. Wenn es eine phase mit kein Ziel gebunden, es geschieht nichts. Aber die phase ist bestanden dennoch.I. e. Sie können nicht "'einfügen' zusätzliche Phasen" in einem Maven built-in-Lebenszyklen. Sie sind schon da, immer! Sie könnten entwickeln Sie Ihre eigenen Lebenszyklus, der mit seinen eigenen Phasen, aber das geht weit darüber hinaus, einfach mit Maven, wie es ist.
Phasen genannt "pre-install" oder "post-Paket" nicht vorhanden sind.
Referenzen:
Maven, Einführung in den Build Lifecycle
Wenn Sie sich jemals gefragt, wie Maven weiß, was zu tun ist, ohne jedes Ziel verbindlich in der POM gibt es einen link zu
default-bindings.xml
am Ende, das liegt in<Your Maven installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/default-bindings.xml
.Phasen für den integrierten Lebenszyklen (sauber, Standard, Website) deklariert sind, in
<Ihre Maven-installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/components.xml
unter.../<component>/<role>org.apache.maven.lifecycle.Lifecycle
.Maven: The Complete Reference", Kapitel 4. Der Build-Lifecycle
Maven by Example, 3.5. Core Concepts
InformationsquelleAutor der Antwort Gerold Broser
Beantwortung spät, genau zu klären, noch eine weitere Ebene der Granularität fehlt in diesem thread: Ausführungen (ein Tor), das sind die kleinsten Einheiten einer Maven-build.
Daher haben wir bauen Zyklen (im Grunde, eine Reihe von Aktionen zu einem bestimmten Ziel), die sich aus Phasen (geringere Granularität, ein Zyklus Schritt), die sich auf eine Reihe von konfigurierten Ziele zur Verfügung gestellt, die von bestimmten plugins. Das heißt, Maven ist (auch) ein plugin executor, jedes plugin kann eine oder mehrere Ziele. Sie dann (auch) zu entscheiden, welche Ziel ist es angebracht, die phase, die meisten der Zeit, in der defaul-life-cycle (ohne, das ist die Standardeinstellung). Aber Sie können eigentlich noch eine andere Ebene: Hinrichtungen (mit dem gleichen Ziel, aus den gleichen plugins, oder verschiedene Ziele aus unterschiedlichen plugins)
Einem Bild, das ich bereit für die Wiederaufnahme des gesamten
Und in der Tat dies ist, wie Maven zeigt, dass es (die kleinste Einheit der Arbeit) sind durch die einzigartige string in seine build-log:
Zum Beispiel hätten wir:
Was ja heißt (auf verschiedenen Ebenen der Granularität):
kompilieren
phase (nicht erwähnt wird, leider) >artifactId
undversion
) >kompilieren
Ziel >default-compile
AusführungEs ist einzigartig, weil in der Tat könnte man das gleiche Ziel (mit dem gleichen plugin) gebunden, um die verschiedenen Phasen oder auf der gleichen phase, aber in verschiedenen Ausführungen (mit unterschiedlichen Konfigurationen). Die
maven-compiler-plugin
, zum Beispiel, ist auch während dertest-compile
phase (in eine andere phase) kompilieren, testen, code (über seinetestCompile
Ziel) in einer anderen Ausführung (default-testCompile
). Sie konnte auch kompilieren (mit dem gleichen plugin und Ziel) einige auto-generierter code während einer anderen phase definiert, die durch eine Ausführung von Ihnen angegebenen int-POM (und möglicherweise eine andere Konfiguration).Standard-Ausführungen vorgesehen sind out-of-the-box über Maven-packaging-Bindungen, das ist standardmäßig (und die Durchsetzung der Konvention über Konfiguration) Maven ruft bereits bestimmte Ziele (standard-plugins) während bestimmter Phasen. Die Hinrichtungen-ids der Standard-Aufrufe sind gemäß den bestimmte Konventionen.
Dies erklärt auch, warum, wenn Sie wirklich wollen, zu überschreiben einer Voreinstellung (Bindung) von einem Maven-build, die Sie angeben müssen (überschreiben) genau die gleiche Ausführung id in der POM für das gleiche plugin. Sie könnten, zum Beispiel, überspringen Zusammenstellung einfach die Definition einer Ausführung der
maven-compiler-plugin
mit der gleichendefault-compile
- id, aber gebunden an einen nicht existierenden phase (oder eine leere).Um es kurz zu machen: eine Hinrichtung erzählt, Maven, welches Ziel(s) ausführen, mit welcher Konfiguration in die phase.
Einige Ausführungen standardmäßig bereitgestellt werden (defaul-Bindungen), was erklärt, warum die maven minimalen pom nur 6 Linien können bereits viel tun, (compile, test, package, etc.): Umsetzung von Zielen des standard-plugins, die in bestimmten Phasen: es ist convention over configuration. Dann, über die
pom.xml
- Konfiguration kannst du Zeug (Hinrichtungen), um die zu bauen oder zu beeinflussen, das Verhalten von bereits konfigurierten plugins (in diesem Fall keineexecutions
Abschnitt, aber nurconfiguration
wäre genug).Ja, Sie könnte überspringen bauen Zyklen (und deren Phasen) und direkt aufrufen-Ziele (von plugins). Stellen Sie sich Folgendes vor:
(ANMERKUNG: Sie könnte auch aufrufen, inline in einem einzigen Aufruf)
Hier sind wir kompilieren app-code, test-code, ausführen von tests und Paket: stellen Sie sich vor, wie die manuelle, fehleranfällige, sich wiederholende und zeitaufwendig das wäre. Konvention über Konfiguration hilft uns: Maven stellt build-Lebenszyklus und Phasen. Die Standard-Lebensdauer (ohne Namen, das ist der Standard), bietet eine Reihe von Phasen auf der Grundlage der besten Praktiken und Konventionen (das mantra von Maven).
Wenn Sie möchten, um das gleiche zu erreichen wie oben, führen Sie einfach:
mvn package
und es wird automatisch kompilieren, testen und packen Sie Ihr Projekt. Wie? aufrufen der plugins. Das heißt, die Phasen sind sinnvoll und konfigurierbaren Satz von plugins (Ziele) Hinrichtungen. Um es noch mehr standard, für jede phase von Maven wird Erstens ruft alle vorangegangenen phase, so dass z.B., wenn Sie testen möchten, werden Sie sicher, dass Sie zuerst kompilieren.p.s. beachten Sie, dass bei der Angabe mehrerer Ziele für die gleichen
execution
Sie immer noch deutlich sehen, in das build-Protokoll zwei unterschiedliche Ausführungen (mit derselben id) für die zwei verschiedene Ziele (also, immer noch einzigartig Tupel).InformationsquelleAutor der Antwort A_Di-Matteo
Kredit Sandeep Jindal und Premraj (von hier aus Welche Maven-Ziele und Phasen und was ist deren Unterschied?). Ihre Erklärung, die mir helfen zu verstehen.
Erstellte ich einige code-Beispiele & einige einfache Erklärungen hier https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Ich denke, es kann helfen, andere zu verstehen und kann versuchen, etwas zu direkt.
Kurz aus dem link, solltest Du nicht versuchen zu verstehen, alle drei auf einmal, Sie sollten zuerst verstehen, die Beziehung in diesen Gruppen:
1. Life-Cycle-vs-Phase
Lebenszyklus ist eine Sammlung von phase in der Folge finden Sie hier Life-Cycle-Referenzen. Beim Aufruf einer phase, wird es auch nennen alle phase vor.
Beispielsweise die sauber Lebenszyklus hat 3 Phasen (pre-clean, clean, post-clean -).
Aufrufen pre-clean und sauber.
2. Plugin vs Ziel
Ziel ist wie eine Aktion in Plugin. Also, wenn ein plugin eine Klasse, Ziel ist es eine Methode.
rufen Sie ein Ziel wie diese:
Bedeutet dies "rufen Sie die sauberen Ziel, in der sauber-plugin" (Nichts bezieht sich auf die saubere phase hier. Lassen Sie sich nicht von dem Wort"sauber" ist verwirrend, Sie sind nicht das gleiche! Siehe ausführliche Erklärung in meinem link oben)
3. Nun der Zusammenhang zwischen Phase & Ziel:
Phase können (pre)links zu Ziel(s).Zum Beispiel, normalerweise, die sauber phase links zum reinigen Ziel. So, wenn Sie rufen Sie diesen Befehl:
Ruft die pre-clean-phase und der reinen phase, die links zu den clean:reinigen Ziel.
Es ist fast das gleiche wie:
InformationsquelleAutor der Antwort Surasin Tancharoen
Quelle: http://www.codetab.org/apache-maven-tutorial/ , das ist wirklich gutes tutorial
Lebenszyklen der Lebenszyklus-Phasen, Plugins und Plugin-Goals sind der Kern von Maven.
Wenn wir laufen "mvn package" in einem Java-Projekt Maven-plugin bindet Sie die Ziele der lifecycle Phasen wie in der nächsten Abbildung.
InformationsquelleAutor der Antwort Erlan
So zu erklären, ein wenig weiter wie beschrieben hier
Maven-builds sind aufgeteilt in Lebenszyklen, diese sind:
Jeder dieser Zyklen ist in Phasen aufgeteilt.
Zum Beispiel bauen ist in Phasen aufgeteilt, wie:
Phasen haben mit Zielen zu führen, die vor pre- oder nach post- eine phase, zum Beispiel:
Können Sie die Ansicht " Ziele als zusätzliche "eingefügt" Phasen, wenn Sie mögen.
Lesen hier oder werfen Sie einen Blick auf @Gerolds Antwort für details.
InformationsquelleAutor der Antwort Drejc
Und nachträglich ein weiteres Diagramm
"callable" Phasen in dunkelblau (d.h. Phasen mit hypenation sind in der Regel nicht von der Kommandozeile aufgerufen, da Sie möglicherweise nicht ausgelegt werden, um das Projekt verlassen, in einem gut definierten Zustand).
InformationsquelleAutor der Antwort David Tonhofer
Lebenszyklus vs. Phasen:
Life Cycle
ist eine Sammlung vonphases
. Wenn Sie rufen eine phase, es wird auch rufen alle Phasen, bevor Sie kommen.Maven kommt mit 3 built-in build-life-cycles:
Sauber Lebenszyklus 3 Phasen: pre-clean, clean und post-clean. Standard-und site-Lebenszyklen die Phasen sind die gleichen wie in der Abbildung gezeigt.
InformationsquelleAutor der Antwort Arun Raaj