Maven을 사용할 때에 헷깔리는 용어가 바로 phase, lifecycle, goal인 것 같습니다.
그래서 정리해 봅니다. (phase들은 파란색, lifecycle들은 녹색, goal들은 노란색으로 구분해서 작성한다.)
Phase
phase는 최소 수행 단위다.
예를 들면 compile, test, package, clean, ... 등이 대표적인 phase이다.
Lifecycle
Lifecycle은 관련 있는 phase들의 순서가 있는 묶임으로 생각하면 된다.
Maven에는 다음과 같은 3개의 lifecycle이 있다.
- default : 빌드를 수행하는데, 23개의 phases로 구성된다. (validate -> .. -> generage-sources -> .. -> compile -> .. -> test -> .. -> package -> .. -> verify -> install -> deploy)
- clean : 생성된 파일을 삭제한다. (pre-clean -> clean -> post-clean)
- site : 문서를 생성하는 4개의 phases로 구성된다. (pre-site -> site -> post-site -> site-deploy)
※ mvn <phase> : lifecycle 상 앞에 있는 모든 phase들을 순서대로 모두 실행 (특정 phase만 실행 불가)
Goal
Goal은 plugin의 단위 기능이다.
그리고 중요한 것은 phase는 "plugin:goal"에 지정된다. 즉, "mvn <phase>" 명령을 실행하는 것은 phase에 지정된 plugin의 특정 goal을 실행하는 것이다.
몇 개 예를 들어보면 다음과 같다.
- compile => compiler:compile, test-compile => compiler:testCompile, test => surefire:test, package => jar:jar 또는 war:war, ...
그럼, phase 없는 goal이 있을까? 많다. Maven에서 만든 다른 plugin들은 그런 경우가 많다. 이런 경우는 다음과 같이 실행해야 한다.
mvn <plugin>:<goal>
Maven 설정 기준으로 eclipse 프로젝트 설정 파일을 만드는 eclispe plugin을 사용해 다음과 같이 실행한다.
- mvn eclipse:eclipse
반대로 goal이 없는 phase도 있다. validate, initialize, verify, .. 등이다. 이들을 독립적으로 실행되지 않고, lifecycle을 통해서만 실행된다는 것이다.
이제 정리가 좀 된 것 같다. ^^
Written with ♥ by Vincent Han