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?

 228
Author: Tunaki, 2013-04-25

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.

 184
Author: Pace,
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:

  1. default
  2. clean
  3. strona

Każdy cykl życia kompilacji składa się z faz

Na przykład cykl życia default 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:

Tutaj wpisz opis obrazka

Bibliografia 1
Odniesienie 2

 141
Author: Premraj,
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.

Tutaj wpisz opis obrazka

Link do odnośnika

 35
Author: Stas,
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:]}
  1. Cykl życia

    Trzy wbudowane cykle życia (aka zbuduj cykle życia): default, clean, site. ( Odniesienie Do Cyklu Życia )

  2. Faza

    Każdy cykl życia składa się z fazy , np. dla cyklu życia default: compile, test, package, install, itd.

  3. 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 )

  4. 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ą.

Maven może być wywołany przez:
  1. Faza (np. clean, package)
  2. <plugin-prefix>:<goal> (np. dependency:copy-dependencies)
  3. <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
 32
Author: Sandeep Jindal,
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/

 5
Author: Surasin Tancharoen,
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

 1
Author: Venky Vungarala,
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>

 1
Author: Vishrant,
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.

Tutaj wpisz opis obrazka

Fazy pogrubione - są głównymi fazami powszechnie używanymi.

 0
Author: Lior Bar-On,
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