Phase – виртуальные шаги из, которых состоит lifecycle в Maven. Вообще, существует три жизненных цикла:
• Clean – фазы pre-clean, clean, post-clean;
• Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
• Site – pre-site, site, post-site, site-deploy.
Goal – это конкретное выполняемое плагином действие. Плагин привязывает свои голы к фазам. Например, когда мы вызываем mvn clean
, работу по удалению файлов сборки делает не сама фаза clean
, а привязанная к ней цель clean:clean
из встроенного maven-clean-plugin
.
Когда аргументом команды mvn
передается фаза, кроме нее самой выполнятся все предшествующие ей в том же лайфсайкле. Вместо фазы возможно явно передать цель (mvn clean:clean
вместо mvn clean
), но тогда никакие другие цели вызваны не будут (в данном примере цели фазы pre-clean
).
Фазы всегда выполняются в том порядке, в котором они следуют в жизненном цикле. Если к одной фазе привязано несколько целей, они отработают в порядке объявления в pom.xml.
Некоторые плагины могут предоставлять цели, не привязанные ни к каким фазам. Их можно вызвать только явно.
Если в команду mvn
передается несколько фаз/целей, они выполнятся последовательно. Каждая цель в процессе выполняется только однажды.
Так, вызов mvn test package
– то же самое что mvn package
, потому что в первом случае все цели из фазы test (и предыдущих) уже будут исполнены и пропущены в package. mvn clean install
так заменить не получится, потому что это фазы из разных жизненных циклов.