Czym są cele i fazy Mavena i jaka jest ich różnica?
Jaka jest różnica / relacja między celami i fazami Mavena? Jak są ze sobą spokrewnieni?
8 answers
Cele są realizowane w etapach, które pomagają określić kolejność realizacji celów w. Najlepiej jest spojrzeć na domyślne wiązania cyklu życia Mavena, które pokazują, które cele są domyślnie uruchamiane w jakich fazach. 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 potęguje fakt, że po uruchomieniu Mavena można podać / align = "left" / Jeśli określisz fazę, to maven uruchomi wszystkie fazy aż do fazy określonej przez Ciebie w kolejności (np. jeśli określisz pakiet, najpierw przejdzie przez fazę kompilacji, następnie fazę testową i wreszcie fazę pakietu) i dla każdej fazy uruchomi wszystkie cele związane z tą fazą.
Kiedy utworzysz wykonanie wtyczki w pliku Maven build i określisz tylko cel, to będzie on wiązał ten cel z daną domyślną fazą. Na przykład bramka jaxb:xjc wiąże domyślnie do fazy generate-resources. Jednak, gdy określisz wykonanie, możesz również jawnie określić fazę dla tego celu.
Jeśli określisz cel podczas wykonywania Mavena, to nadal będzie on uruchamiał wszystkie fazy aż do fazy dla tego celu. Innymi słowy, jeśli określisz cel jar, uruchomi on wszystkie fazy aż do fazy pakietu (i wszystkie cele w tych fazach), a następnie uruchomi cel jar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-08 19:33:00
Cykl życia jest sekwencją nazwanych faz .
Fazy wykonuje się kolejno. Wykonanie fazy oznacza wykonanie wszystkich poprzednich faz.Plugin to zbiór celówzwany także MOJO (M avenO ldJ avaO bject).
Analogia: Plugin jest klasą, A cele są metodami wewnątrz klasy.
Maven opiera się na centralnej koncepcji cyklu życia kompilacji.
Tam są to trzy wbudowane cykle życia:
- default
- clean
- strona
Każdy cykl życia kompilacji składa się z faz
Na przykład cykl życiadefault
składa się z następujących faz budowania :
◾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, wystarczy wywołać jedną komendę:]}
mvn <phase> { Ex: mvn install }
Dla powyższego polecenia, począwszy od pierwszej fazy, wszystkie fazy są wykonywane kolejno do Faza "install". W przeciwieństwie do innych gier, w których gra jest rozgrywana w trybie wieloosobowym, nie jest to gra wieloosobowa.]}
mvn clean install plugin:goal
Jednakże, jeśli chcesz dostosować prefiks używany do odwołania się do wtyczki, możesz określić prefiks bezpośrednio poprzez parametr konfiguracji na maven-plugin-plugin
w wtyczki pom.
Faza budowania składa się z Plugin cele
Większość funkcjonalności Mavena znajduje się w wtyczkach. Plugin zapewnia zestaw cele które mogą być wykonywane przy użyciu następującej składni:
mvn [plugin-name]:[goal-name]
Na przykład, projekt Java może być skompilowany za pomocą celu kompilacji wtyczki kompilatora, uruchamiając mvn compiler:compile
.
Build lifecycle to lista nazwanych faz, które mogą być użyte do nadania kolejności realizacji celu.
Cele dostarczane przez wtyczki mogą być powiązane z różnymi fazami cyklu życia. na przykład domyślnie cel compiler:compile
jest związany z compile
Faza , podczas gdy cel surefire:test
jest związany z test
Faza . Rozważ następującą komendę:
mvn test
Po wykonaniu poprzedniego polecenia, Maven uruchamia wszystkie cele związane z każdą fazą, aż do fazy test
włącznie. W takim przypadku Maven uruchamia cel resources:resources
związany z fazą process-resources
, następnie compiler:compile
i tak dalej, aż w końcu uruchomi cel surefire:test
.
Jednak, mimo że faza budowania jest odpowiedzialna za konkretny etap w cyklu życia kompilacji, sposób, w jaki wykonuje te obowiązki, może się różnić. Odbywa się to poprzez deklarowanie celów wtyczki związanych z tymi fazami budowania.
Cel wtyczki reprezentuje konkretne zadanie (lepsze niż Faza budowania), które przyczynia się do budowania i zarządzania projektem. Może być związany z zero lub więcej faz budowania. Cel niezwiązany z żadną fazą kompilacji może zostać wykonany poza cyklem życia kompilacji poprzez bezpośrednie wywołanie. Order of wykonanie zależy od kolejności, w jakiej cel(y) i faza(y) budowania są wywoływane. Na przykład rozważ poniższą komendę. Argumenty clean
i package
są fazami budowania, podczas gdy dependency:copy-dependencies
jest celem (wtyczki).
mvn clean dependency:copy-dependencies package
Jeśli to miało być wykonane, Faza clean
zostanie wykonana najpierw (co oznacza, że będzie uruchamiać wszystkie poprzednie fazy czystego cyklu życia, plus samą fazę clean
), a następnie cel dependency:copy-dependencies
, zanim ostatecznie wykonasz fazę package
(i wszystkie jej poprzedzające fazy fazy budowania domyślnego cyklu życia).
Ponadto, jeśli cel jest związany z jedną lub kilkoma fazami budowania, cel ten będzie wywoływany we wszystkich tych fazach.
Ponadto Faza budowania może również mieć zero lub więcej celów związanych z nią. Jeśli Faza budowania nie ma celów związanych z nią, Faza budowania nie zostanie wykonana. Ale jeśli ma jeden lub więcej celów związanych z nim, zrealizuje wszystkie te cele.
Wbudowane wiązania cyklu życia
Niektóre fazy mają cele związane z domyślnie. W przypadku domyślnego cyklu życia wiązania te zależą od wartości opakowania.
Maven Architecture:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-04 04:51:44
Wybrana odpowiedź jest świetna, ale mimo to chciałbym dodać coś małego do tematu. Ilustracja.
To wyraźnie pokazuje, jak różne fazy związane z różnymi wtyczkami i cele, które te wtyczki ujawniają.
Zbadajmy więc przypadek uruchomienia czegoś takiego jak mvn compile
:
- jest to faza , która uruchamia kompilatorplugin z compile goal
- Wtyczka kompilatora ma różne cele. For
mvn compile
it ' s mapowane do konkretnego celu, celu kompilacji. - to to samo co bieganie
mvn compiler:compile
Dlatego Faza składa się z celów Wtyczki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 11:24:57
Jest to bardzo ważne, ponieważ nie jest to konieczne, ponieważ nie jest to konieczne., ale próbowałem podsumować :
Maven definiuje 4 elementy procesu budowania:]}-
Cykl życia
Trzy wbudowane cykle życia (aka zbuduj cykle życia):
default
,clean
,site
. ( Odniesienie Do Cyklu Życia ) -
Faza
Każdy cykl życia składa się z fazy , np. dla cyklu życia
default
:compile
,test
,package
,install
, itd. -
Plugin
Artefakt, który zapewnia jeden lub więcej celów.
Na podstawie typu opakowania(
jar
,war
, itd.) cele wtyczek są domyślnie powiązane z fazami. (wbudowane wiązania cyklu życia ) -
Cel
Zadanie (akcja), które jest wykonywane. Wtyczka może mieć jeden lub więcej celów.
Jeden lub więcej celów potrzebuje należy podać przy konfigurowaniu wtyczki w POM . Dodatkowo, w przypadku gdy wtyczka nie ma zdefiniowanej domyślnej fazy, określony cel(Y) może być związany z fazą.
- Faza (np.
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ęcej kombinacji dowolnych lub wszystkich, np.:
mvn clean dependency:copy-dependencies package
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-04 13:48:30
Kredyt dla Sandeepa Jindala i Premraja. Ich wyjaśnienie pomaga mi zrozumieć po zdezorientowaniu na ten temat przez jakiś czas.
Stworzyłem kilka przykładów pełnego kodu i kilka prostych wyjaśnień tutaj https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained /. Myślę, że to może pomóc innym zrozumieć.
W skrócie od linku, nie powinieneś próbować zrozumieć wszystkich trzech naraz, najpierw powinieneś zrozumieć związek w tych grupy:
- cykl życia a Faza
- Plugin vs Goal
1. Cykl życia a Faza
Cykl Życia jest zbiorem fazy w kolejności patrz tutaj odniesienia do cyklu życia . Gdy wywołasz fazę , wywoła ona również całą fazę przed nią.
Na przykład cykl życia czystego składa się z 3 faz (pre-clean, clean, post-clean ).mvn clean
Wywoła pre-clean i clean .
2. Plugin vs Goal
Cel jest jak działanie w Plugin. Więc jeśli plugin jest klasą, celem jest metoda.
Możesz tak nazwać Cel:
mvn clean:clean
Oznacza to " call the clean goal, in the clean plugin "(nic nie odnosi się do czystej fazy tutaj. Nie pozwól, aby słowo" czyste " mylące cię, nie są takie same!)
3. Teraz relacja między fazą & Cel:
Phase can (pre) links to Goal (s).Na przykład, normalnie, czysta Faza łączy się z czystym celem. Tak więc, gdy wywołasz tę komendę:
mvn clean
Wywoła fazę pre-clean I Fazę clean, która łączy się z celem clean:clean.
To prawie to samo co:
mvn pre-clean clean:clean
Więcej szczegółów i pełne przykłady są w https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 22:29:44
Terminologia robocza Mavena mająca fazy i cele.
Faza: faza Mavena to zestaw działań, który jest związany z 2 lub 3 celami
Exmaple: - jeśli uruchomisz mvn clean
To jest faza, która wykona cel mvn clean: clean
Bramka:bramka Mavena]}
Dla odniesienia http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-16 09:33:27
Istnieją trzy wbudowane cykle życia:
- default
- clean
- Strona
Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, proces-resources, compile, process-classes, generate-test-sources, proces-test-sources, generate-test-resources, proces-test-resources, test-compile, proces-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
Lifecycle clean -> [pre-clean, clean, post-clean]
Strona cyklu życia -> [pre-site, site, post-site, site-deploy]
Przepływ jest sekwencyjny, na przykład dla domyślnego cyklu życia, zaczyna się od validate, następnie initialize i tak dalej...
Możesz sprawdzić cykl życia, włączając tryb debugowania mvn
tj. mvn -X <your_goal>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 19:05:34
Uważam, że dobra odpowiedź jest już dostarczona, ale chciałbym dodać Łatwy do naśladowania schemat różnych 3 cykli życia(build
, clean
, i site
) oraz fazy w każdym.
Fazy pogrubione - są głównymi fazami powszechnie używanymi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-01 06:43:39