Cele są wykonywane etapami, które pomagają określić, w jakim celu zostaną zrealizowane cele. Najlepszym zrozumieniem tego jest przyjrzenie się domyślnym powiązaniom cyklu życia Maven, które pokazują, które cele są uruchamiane w których fazach domyślnie. Cele fazy kompilacji będą zawsze wykonywane przed celami fazy testowej, które zawsze będą wykonywane przed celami fazy pakietu i tak dalej.
Część zamieszania pogarsza fakt, że podczas wykonywania maven możesz określić cel lub fazę. Jeśli określisz fazę, maven przeprowadzi wszystkie fazy do fazy określonej w kolejności (np. Jeśli określisz pakiet, najpierw przejdzie przez fazę kompilacji, a następnie fazę testową, a na koniec fazę pakietu) i dla każdej fazy będzie realizuj wszystkie cele związane z tą fazą.
Kiedy utworzysz wykonanie wtyczki w swoim pliku kompilacji Maven i określisz tylko cel, spowoduje to powiązanie go z daną domyślną fazą. Na przykład cel jaxb: xjc domyślnie wiąże się z fazą generowania zasobów. Jednak po określeniu wykonania można również jawnie określić fazę dla tego celu.
Jeśli określisz cel podczas wykonywania Maven, uruchomi on ten cel i tylko ten cel. Innymi słowy, jeśli podasz cel jar: jar, uruchomi on cel jar: jar, aby spakować kod do jar. Jeśli wcześniej nie uruchomiłeś celu kompilacji lub nie przygotowałeś skompilowanego kodu w inny sposób, może to nie powieść się.
Przyzwyczaiłem się mówić „Maven przechodzi wszystkie fazy (aż do podanego)” zamiast „uruchamia” lub „wykonuje” (ten ostatni, jak to się nazywa we wstępie do cyklu życia Mavena ). Takie odróżnienie go wyraźniej od kodu celu, który jest naprawdę wykonywany. Ale to może być osobisty gust.
GeroldBroser przywraca Monikę
Ale możemy również realizować cele, które nie należą do żadnej fazy, tj. Czy mvn archetype:generatew takim razie maven wykonuje tylko cel?
Quazi Irfan
1
@Pace Czy masz odniesienie do ostatniego akapitu? Wątpiłem w to i wypróbowałem to w prostym projekcie tutaj: mvn testdziała:, --- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:testa mvn compiler:testCompilepo prostu działa --- maven-compiler-plugin:3.1:testCompile ....
GeroldBroser przywraca Monikę
4
Uruchomienie @Pace mvn clean compiler:testCompilekończy się --- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompileniepowodzeniem Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase(gdzie MvnPhasejest testowana klasa, do której odwołuje się klasa testowa). Najwyraźniej fazy nie są wywoływane, jeśli cel jest wywoływany wprost.
GeroldBroser przywraca Monikę
1
Na podstawie informacji uzyskanych od geroldbroser i @ kekko12 zaktualizowałem ostatni akapit, aby stwierdzić, że gdy określony jest cel, uruchamiany jest tylko ten cel, a nie wszystkie poprzednie fazy.
Tempo
188
Cykl życia to sekwencja nazwanych faz .
Fazy są wykonywane sekwencyjnie. Wykonanie fazy oznacza wykonanie wszystkich poprzednich faz.
Wtyczka jest zbiorem celów zwanych także MOJO ( M aven O ld J ava O bject).
Analogia: wtyczka jest klasą, a cele są metodami w klasie.
Maven opiera się na centralnej koncepcji cyklu życia kompilacji . Wewnątrz każdego cyklu życia fazy budowy znajdują się fazy budowy , a wewnątrz każdej fazy budowy znajdują się cele budowy .
Możemy wykonać fazę kompilacji lub cel kompilacji. Podczas wykonywania fazy kompilacji realizujemy wszystkie cele kompilacji w tej fazie kompilacji. Cele kompilacji są przypisane do jednej lub kilku faz kompilacji. Możemy również wykonać cel kompilacji bezpośrednio.
Istnieją trzy główne wbudowane cykle życia kompilacji :
Na przykład defaultcykl życia składa się z następujących faz kompilacji :
◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
Aby przejść przez powyższe fazy, musimy tylko wywołać jedno polecenie:
mvn <phase> { Ex: mvn install }
W przypadku powyższego polecenia, począwszy od pierwszej fazy, wszystkie fazy są wykonywane sekwencyjnie, aż do fazy „instalacji”. mvnmoże wykonać cel lub fazę (lub nawet wiele celów lub wiele faz) w następujący sposób:
mvn clean install plugin:goal
Jeśli jednak chcesz dostosować prefiks używany do odwoływania się do wtyczki, możesz określić prefiks bezpośrednio poprzez parametr konfiguracyjny na POMmaven-plugin-plugin w wtyczce.
Większość funkcji Maven znajduje się we wtyczkach. Wtyczka zapewnia zestaw celów, które można wykonać przy użyciu następującej składni:
mvn [plugin-name]:[goal-name]
Na przykład projekt Java można skompilować z celem kompilacji wtyczki kompilatora, uruchamiając go mvn compiler:compile.
Cykl życia kompilacji to lista nazwanych faz, których można użyć do nadania kolejności realizacji celu.
Cele zapewniane przez wtyczki mogą być powiązane z różnymi fazami cyklu życia. Na przykład domyślnie celcompiler:compile jest powiązany z compilefazą , podczas gdy celsurefire:test jest powiązany z testfazą . Rozważ następujące polecenie:
mvn test
Po wykonaniu poprzedniego polecenia Maven wykonuje wszystkie cele związane z każdą z faz aż do fazy włącznie test. W takim przypadku Maven realizuje resources:resourcescel związany z process-resourcesfazą compiler:compilei tak dalej, aż w końcu realizuje surefire:testcel.
Jednak nawet jeśli faza kompilacji odpowiada za konkretny etap cyklu kompilacji, sposób, w jaki wykonuje te obowiązki, może być różny. Odbywa się to poprzez zadeklarowanie celów wtyczek związanych z tymi fazami kompilacji.
Cel wtyczki reprezentuje określone zadanie (lepsze niż faza kompilacji), które przyczynia się do budowy i zarządzania projektem. Może być związany z zerową lub większą liczbą faz kompilacji. Cel niezwiązany z żadną fazą kompilacji można wykonać poza cyklem kompilacji przez bezpośrednie wywołanie. Kolejność wykonywania zależy od kolejności, w której wywoływane są cele i fazy kompilacji. Rozważmy na przykład poniższe polecenie. cleanI packageargumenty są fazy budowy, natomiast dependency:copy-dependenciesjest celem (z wtyczką).
mvn clean dependency:copy-dependencies package
Jeśli miałoby to zostać wykonane, cleanfaza zostanie wykonana jako pierwsza (co oznacza, że uruchomi wszystkie poprzednie fazy czystego cyklu życia, plus cleansamą fazę), a następnie dependency:copy-dependenciescel, zanim ostatecznie wykona packagefazę (i wszystkie poprzednie fazy budowania domyślny cykl życia).
Co więcej, jeśli cel jest związany z jedną lub większą liczbą faz budowy, cel ten zostanie wywołany we wszystkich tych fazach.
Co więcej, faza kompilacji może wiązać się z zero lub większą liczbą celów. Jeśli w fazie kompilacji nie ma żadnych celów, faza kompilacji nie zostanie wykonana. Ale jeśli ma do tego przypisany jeden lub więcej celów, zrealizuje wszystkie te cele.
Wbudowane powiązania cyklu życia
Niektóre fazy mają domyślnie powiązane cele. W domyślnym cyklu życia powiązania te zależą od wartości opakowania.
Jeśli mam 2 profile, czy mogę najpierw uruchomić wszystkie wtyczki profilu 1, a następnie profilu 2?
Pszczoła
[plugin-name]w tym przykładzie mvn [plugin-name]:[goal-name]jest raczej prefiksem wtyczki . mvn clean installmożna nie tylko „ stosować w scenariuszu wielomodułowym ”. Multi-moduł to zupełnie inny temat.
GeroldBroser przywraca Monikę
Czy cele przypisane do tej samej fazy są zgodne z jakimkolwiek zamówieniem?
węgorz ghEEz
5
Większość tego tekstu jest kopiowana dosłownie z dokumentacji Maven . Należy to jasno stwierdzić!
Lii
niesamowite źródło!
Bobo
45
Wybrana odpowiedź jest świetna, ale nadal chciałbym dodać do tematu coś małego. Ilustracja.
Wyraźnie pokazuje, w jaki sposób różne fazy łączyły się z różnymi wtyczkami oraz cele, które te wtyczki ujawniają.
Przeanalizujmy więc przypadek uruchomienia czegoś takiego mvn compile:
Jest to faza, która wykonuje wtyczkę kompilatora z celem kompilacji
Wtyczka kompilatora ma różne cele. Ponieważ mvn compilejest odwzorowany na konkretny cel, cel kompilacji.
Wygląda jak błąd ilustracji, dziękuję za zauważenie (założyłem go w sieci).
Johnny,
3
Skąd masz ilustrację? Czy sprawdziłeś prawa autorskie i warunki użytkowania?
Abdull,
1
@Abdull zdjęcie zrobione tutaj carminespagnuolo.eu/otheractivities/tutorato/PR-2014-2015/... (i pojawia się również na wielu innych stronach internetowych) dodając je do odpowiedzi. Dzięki za podniesienie tego punktu, nie byłem świadomy jego znaczenia.
Johnny
1
Wskaźniki od faz do wtyczek na schemacie też nie są całkiem poprawne, jarwtyczka faktycznie działa w packagefazie. Pom pom w kanapce między fazami i wtyczkami jest nieco mylące (zakładam, że powinno to oznaczać, że w pom można skonfigurować, które wtyczki działają w poszczególnych fazach, oprócz domyślnych powiązań). Ogólna zasada jest jednak słuszna.
Trzy wbudowane w cyklu życia (aka kompilacji cyklu życia ) default, clean, site. ( Odniesienie cyklu życia )
Faza
Każdy cyklu składa się z etapów , na przykład do defaultcyklu: compile, test, package, install, itd.
Podłącz
Artefakt, który zapewnia jeden lub więcej celów.
W zależności od rodzaju opakowań ( jar, waretc.) cele plugins' są zobowiązane do fazy domyślnie. ( Wbudowane wiązania cyklu życia )
Cel
Zadanie (akcja), które jest wykonywane. Wtyczka może mieć jeden lub więcej celów.
Podczas konfigurowania wtyczki w POM należy określić co najmniej jeden cel . Ponadto w przypadku, gdy wtyczka nie ma zdefiniowanej domyślnej fazy, określone cele mogą zostać powiązane z fazą.
Jedynie fazy cyklu życia mają sens jako „kroki” (procesu kompilacji). Wolę nazwać to 4 bytami / przedmiotami / rzeczami .
GeroldBroser przywraca Monikę
Kiedy widzę świat Build Phase, myślę o nim jako o kolejnej fazie cyklu życia i to mnie dezorientuje.
Quazi Irfan
26
Wierzę, że dobra odpowiedź jest już zapewnione, ale chciałbym dodać łatwy do naśladowania schemat różnych cykli życiowych 3 ( build, clean, i site) oraz faz w każdej.
Fazy pogrubione - są to najczęściej używane fazy główne.
Krótko mówiąc, nie powinieneś próbować zrozumieć wszystkich trzech naraz, najpierw powinieneś zrozumieć relacje w tych grupach:
Cykl życia a faza
Wtyczka vs cel
1. Cykl życia a faza
Cykl życia to zbiór etapów w sekwencji zobacz tutaj Referencje cyklu życia . Kiedy wywołasz fazę , wywoła ona również wszystkie fazy przed nią.
Na przykład cykl czyszczenia składa się z 3 faz ( czyszczenie wstępne, czyszczenie, czyszczenie końcowe ).
mvn clean
Zadzwoni do czyszczenia wstępnego i czyszczenia .
2. Wtyczka vs cel
Cel jest jak akcja we wtyczce . Więc jeśli wtyczka jest klasą, celem jest metoda.
możesz nazwać taki cel:
mvn clean:clean
Oznacza to „zadzwoń do czystego celu w czystej wtyczce” (Nic nie odnosi się tutaj do fazy czystej. Nie pozwól, aby słowo „czyste” myliło cię, nie są takie same!)
3. Teraz związek między fazą a celem:
Faza może (wstępnie) prowadzić do celu ( celów ). Na przykład normalnie faza czysta łączy się z czystym celem. Po wywołaniu tego polecenia:
mvn clean
Wywoła fazę czyszczenia wstępnego i fazę czyszczenia, która łączy się z celem czyszczenia: czyszczenia.
Nie musi to być „kojarzone z 2 lub 3 celami” . Może to być również brak , jeden lub więcej niż trzy .
GeroldBroser przywraca Monikę
1
Istnieją trzy wbudowane cykle życia kompilacji:
domyślna
czysty
teren
Domyślny cykl życia -> [sprawdź, zainicjuj, wygeneruj-źródła, procesy-źródła, wygeneruj-zasoby, procesy-zasoby, kompiluj, klasy procesów, wygeneruj-przetestuj-źródła, proces-przetestuj-źródła, wygeneruj-przetestuj-zasoby, proces -test-resources, test-kompilacja, testy procesu-klasy, testy, przygotowanie pakietu, pakiet, test przed integracją, test integracji, test po integracji, weryfikacja, instalacja, wdrożenie]
Cykl życia czysty -> [czyszczenie wstępne, czyszczenie, czyszczenie końcowe]
Cykl życia witryny -> [instalacja wstępna, witryna, witryna po instalacji, wdrożenie witryny]
Przepływ jest sekwencyjny, na przykład w domyślnym cyklu życia, zaczyna się od sprawdzania poprawności , a następnie inicjalizacji i tak dalej ...
Możesz sprawdzić cykl życia, włączając tryb debugowania mvnnp.mvn -X <your_goal>
Odpowiedzi:
Cele są wykonywane etapami, które pomagają określić, w jakim celu zostaną zrealizowane cele. Najlepszym zrozumieniem tego jest przyjrzenie się domyślnym powiązaniom cyklu życia Maven, które pokazują, które cele są uruchamiane w których fazach domyślnie. Cele fazy kompilacji będą zawsze wykonywane przed celami fazy testowej, które zawsze będą wykonywane przed celami fazy pakietu i tak dalej.
Część zamieszania pogarsza fakt, że podczas wykonywania maven możesz określić cel lub fazę. Jeśli określisz fazę, maven przeprowadzi wszystkie fazy do fazy określonej w kolejności (np. Jeśli określisz pakiet, najpierw przejdzie przez fazę kompilacji, a następnie fazę testową, a na koniec fazę pakietu) i dla każdej fazy będzie realizuj wszystkie cele związane z tą fazą.
Kiedy utworzysz wykonanie wtyczki w swoim pliku kompilacji Maven i określisz tylko cel, spowoduje to powiązanie go z daną domyślną fazą. Na przykład cel jaxb: xjc domyślnie wiąże się z fazą generowania zasobów. Jednak po określeniu wykonania można również jawnie określić fazę dla tego celu.
Jeśli określisz cel podczas wykonywania Maven, uruchomi on ten cel i tylko ten cel. Innymi słowy, jeśli podasz cel jar: jar, uruchomi on cel jar: jar, aby spakować kod do jar. Jeśli wcześniej nie uruchomiłeś celu kompilacji lub nie przygotowałeś skompilowanego kodu w inny sposób, może to nie powieść się.
źródło
mvn archetype:generate
w takim razie maven wykonuje tylko cel?mvn test
działa:,--- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:test
amvn compiler:testCompile
po prostu działa--- maven-compiler-plugin:3.1:testCompile ...
.mvn clean compiler:testCompile
kończy się--- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompile
niepowodzeniemFailed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase
(gdzieMvnPhase
jest testowana klasa, do której odwołuje się klasa testowa). Najwyraźniej fazy nie są wywoływane, jeśli cel jest wywoływany wprost.Maven opiera się na centralnej koncepcji cyklu życia kompilacji . Wewnątrz każdego cyklu życia fazy budowy znajdują się fazy budowy , a wewnątrz każdej fazy budowy znajdują się cele budowy .
Możemy wykonać fazę kompilacji lub cel kompilacji. Podczas wykonywania fazy kompilacji realizujemy wszystkie cele kompilacji w tej fazie kompilacji. Cele kompilacji są przypisane do jednej lub kilku faz kompilacji. Możemy również wykonać cel kompilacji bezpośrednio.
Istnieją trzy główne wbudowane cykle życia kompilacji :
Każdy cykl życia kompilacji składa się z faz
Na przykład
default
cykl życia składa się z następujących faz kompilacji :Aby przejść przez powyższe fazy, musimy tylko wywołać jedno polecenie:
W przypadku powyższego polecenia, począwszy od pierwszej fazy, wszystkie fazy są wykonywane sekwencyjnie, aż do fazy „instalacji”.
mvn
może wykonać cel lub fazę (lub nawet wiele celów lub wiele faz) w następujący sposób:Jeśli jednak chcesz dostosować prefiks używany do odwoływania się do wtyczki, możesz określić prefiks bezpośrednio poprzez parametr konfiguracyjny na POM
maven-plugin-plugin
w wtyczce.Faza kompilacji składa się z celów wtyczek
Większość funkcji Maven znajduje się we wtyczkach. Wtyczka zapewnia zestaw celów, które można wykonać przy użyciu następującej składni:
Na przykład projekt Java można skompilować z celem kompilacji wtyczki kompilatora, uruchamiając go
mvn compiler:compile
.Cykl życia kompilacji to lista nazwanych faz, których można użyć do nadania kolejności realizacji celu.
Cele zapewniane przez wtyczki mogą być powiązane z różnymi fazami cyklu życia. Na przykład domyślnie cel
compiler:compile
jest powiązany zcompile
fazą , podczas gdy celsurefire:test
jest powiązany ztest
fazą . Rozważ następujące polecenie:Po wykonaniu poprzedniego polecenia Maven wykonuje wszystkie cele związane z każdą z faz aż do fazy włącznie
test
. W takim przypadku Maven realizujeresources:resources
cel związany zprocess-resources
fazącompiler:compile
i tak dalej, aż w końcu realizujesurefire:test
cel.Jednak nawet jeśli faza kompilacji odpowiada za konkretny etap cyklu kompilacji, sposób, w jaki wykonuje te obowiązki, może być różny. Odbywa się to poprzez zadeklarowanie celów wtyczek związanych z tymi fazami kompilacji.
Cel wtyczki reprezentuje określone zadanie (lepsze niż faza kompilacji), które przyczynia się do budowy i zarządzania projektem. Może być związany z zerową lub większą liczbą faz kompilacji. Cel niezwiązany z żadną fazą kompilacji można wykonać poza cyklem kompilacji przez bezpośrednie wywołanie. Kolejność wykonywania zależy od kolejności, w której wywoływane są cele i fazy kompilacji. Rozważmy na przykład poniższe polecenie.
clean
Ipackage
argumenty są fazy budowy, natomiastdependency:copy-dependencies
jest celem (z wtyczką).Jeśli miałoby to zostać wykonane,
clean
faza zostanie wykonana jako pierwsza (co oznacza, że uruchomi wszystkie poprzednie fazy czystego cyklu życia, plusclean
samą fazę), a następniedependency:copy-dependencies
cel, zanim ostatecznie wykonapackage
fazę (i wszystkie poprzednie fazy budowania domyślny cykl życia).Co więcej, jeśli cel jest związany z jedną lub większą liczbą faz budowy, cel ten zostanie wywołany we wszystkich tych fazach.
Co więcej, faza kompilacji może wiązać się z zero lub większą liczbą celów. Jeśli w fazie kompilacji nie ma żadnych celów, faza kompilacji nie zostanie wykonana. Ale jeśli ma do tego przypisany jeden lub więcej celów, zrealizuje wszystkie te cele.
Wbudowane powiązania cyklu życia
Niektóre fazy mają domyślnie powiązane cele. W domyślnym cyklu życia powiązania te zależą od wartości opakowania.
Architektura Maven:
Odniesienie 1
Odniesienie 2
Próbka Eclipse do mapowania cyklu życia Maven
źródło
[plugin-name]
w tym przykładziemvn [plugin-name]:[goal-name]
jest raczej prefiksem wtyczki .mvn clean install
można nie tylko „ stosować w scenariuszu wielomodułowym ”. Multi-moduł to zupełnie inny temat.Wybrana odpowiedź jest świetna, ale nadal chciałbym dodać do tematu coś małego. Ilustracja.
Wyraźnie pokazuje, w jaki sposób różne fazy łączyły się z różnymi wtyczkami oraz cele, które te wtyczki ujawniają.
Przeanalizujmy więc przypadek uruchomienia czegoś takiego
mvn compile
:mvn compile
jest odwzorowany na konkretny cel, cel kompilacji.mvn compiler:compile
Dlatego faza składa się z celów wtyczek .
Link do referencji
źródło
mvn test
wskazujepackage
imvn install
wskazujedeploy
?jar
wtyczka faktycznie działa wpackage
fazie. Pom pom w kanapce między fazami i wtyczkami jest nieco mylące (zakładam, że powinno to oznaczać, że w pom można skonfigurować, które wtyczki działają w poszczególnych fazach, oprócz domyślnych powiązań). Ogólna zasada jest jednak słuszna.Definicje są szczegółowo opisane na stronie witryny Maven Wprowadzenie do cyklu życia kompilacji , ale próbowałem podsumować :
Maven definiuje 4 elementy procesu kompilacji:
Koło życia
Trzy wbudowane w cyklu życia (aka kompilacji cyklu życia )
default
,clean
,site
. ( Odniesienie cyklu życia )Faza
Każdy cyklu składa się z etapów , na przykład do
default
cyklu:compile
,test
,package
,install
, itd.Podłącz
Artefakt, który zapewnia jeden lub więcej celów.
W zależności od rodzaju opakowań (
jar
,war
etc.) cele plugins' są zobowiązane do fazy domyślnie. ( Wbudowane wiązania cyklu życia )Cel
Zadanie (akcja), które jest wykonywane. Wtyczka może mieć jeden lub więcej celów.
Podczas konfigurowania wtyczki w POM należy określić co najmniej jeden cel . Ponadto w przypadku, gdy wtyczka nie ma zdefiniowanej domyślnej fazy, określone cele mogą zostać powiązane z fazą.
Maven można wywołać za pomocą:
clean
,package
)<plugin-prefix>:<goal>
(np.dependency:copy-dependencies
)<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
(np.org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
)z jedną lub większą liczbą kombinacji dowolnej lub wszystkich, np .:
źródło
Build Phase
, myślę o nim jako o kolejnej fazie cyklu życia i to mnie dezorientuje.Wierzę, że dobra odpowiedź jest już zapewnione, ale chciałbym dodać łatwy do naśladowania schemat różnych cykli życiowych 3 (
build
,clean
, isite
) oraz faz w każdej.Fazy pogrubione - są to najczęściej używane fazy główne.
źródło
generate-resources
pojawia się dwa razy igenerate-sources
brakuje.Podziękowania dla Sandeep Jindal i Premraj. Ich wyjaśnienia pomagają mi zrozumieć po tym, jak przez pewien czas jestem zdezorientowany.
Stworzyłem tutaj kilka pełnych przykładów kodu i kilka prostych wyjaśnień https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Myślę, że może to pomóc innym zrozumieć.
Krótko mówiąc, nie powinieneś próbować zrozumieć wszystkich trzech naraz, najpierw powinieneś zrozumieć relacje w tych grupach:
1. Cykl życia a faza
Cykl życia to zbiór etapów w sekwencji zobacz tutaj Referencje cyklu życia . Kiedy wywołasz fazę , wywoła ona również wszystkie fazy przed nią.
Na przykład cykl czyszczenia składa się z 3 faz ( czyszczenie wstępne, czyszczenie, czyszczenie końcowe ).
Zadzwoni do czyszczenia wstępnego i czyszczenia .
2. Wtyczka vs cel
Cel jest jak akcja we wtyczce . Więc jeśli wtyczka jest klasą, celem jest metoda.
możesz nazwać taki cel:
Oznacza to „zadzwoń do czystego celu w czystej wtyczce” (Nic nie odnosi się tutaj do fazy czystej. Nie pozwól, aby słowo „czyste” myliło cię, nie są takie same!)
3. Teraz związek między fazą a celem:
Faza może (wstępnie) prowadzić do celu ( celów ). Na przykład normalnie faza czysta łączy się z czystym celem. Po wywołaniu tego polecenia:
Wywoła fazę czyszczenia wstępnego i fazę czyszczenia, która łączy się z celem czyszczenia: czyszczenia.
Jest prawie taki sam jak:
Więcej szczegółów i pełne przykłady można znaleźć na https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
źródło
Maven działająca terminologia mająca fazy i cele.
Faza: Faza Maven to zestaw akcji, który jest powiązany z 2 lub 3 celami
exmaple: - jeśli uruchomisz mvn clean
to faza wykona cel mvn clean: clean
Cel: cel Maven związany z fazą
w celach informacyjnych http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
źródło
Istnieją trzy wbudowane cykle życia kompilacji:
Domyślny cykl życia -> [sprawdź, zainicjuj, wygeneruj-źródła, procesy-źródła, wygeneruj-zasoby, procesy-zasoby, kompiluj, klasy procesów, wygeneruj-przetestuj-źródła, proces-przetestuj-źródła, wygeneruj-przetestuj-zasoby, proces -test-resources, test-kompilacja, testy procesu-klasy, testy, przygotowanie pakietu, pakiet, test przed integracją, test integracji, test po integracji, weryfikacja, instalacja, wdrożenie]
Cykl życia czysty -> [czyszczenie wstępne, czyszczenie, czyszczenie końcowe]
Cykl życia witryny -> [instalacja wstępna, witryna, witryna po instalacji, wdrożenie witryny]
Przepływ jest sekwencyjny, na przykład w domyślnym cyklu życia, zaczyna się od sprawdzania poprawności , a następnie inicjalizacji i tak dalej ...
Możesz sprawdzić cykl życia, włączając tryb debugowania
mvn
np.mvn -X <your_goal>
źródło