Maven Lifecycle
1. Maven Lifecycle 이란
- Maven에서는 clean, build, site의 세 가지 Lifecycle을 제공하고 있다.
- 컴파일(compile), 테스트(test), 패키지(package), 배포(depooy)등의 과정은 빌드 Lifecycle에 속한다.
- Maven은 모든 빌드 단위에 대한 Lifecycle이 예약되어 있어서 개발자가 임의로 변경 할 수 없다.
- 각 Lifecycle은 순서를 갖는 단계(phase)로 구성된다.
- Maven의 기본 Lifecycle을 이해하려면 Phase와 Goal의 개념을 이해해야 한다.

2. Phase와 Goal

2.1 Phase
- Phase는 Build Lifecycle의 각각의 단계를 의미 한다.
- Phase는 특정 순선에 따라서 goal이 실행되도록 구조를 제공 한다.
- Phase 간에는 의존 관계가 있다.
예를 들어 package phase가 수행되기 위해서는 이전 phase가 순서대로 수행된 다음에 실행된다.

2.2 Goal
- Goal은 Ant의 Target과 같은 개념으로 생각하면 된다.
2.3 Phase와 Goal의 관계
- Maven에서 제공하는 모든 기능은 플러그인 기반으로 동작한다.
- Maven에서 기본으로 제공하는 Phase를 실행하면 해당 Phase와 연결된 플러그인의 Goal이 실행된다.
- 각 phase는 0개 이상의 goal과 바인드 되어 있으며, 대부분 0또는 1개 이상의 Goal이 바인드 되어 있다.

- Plugin Goal
- Maven에서 플러그인을 실행할 때 '플러그인이름:플러그인지원골'의 형식으로 실행 할 기능을 선택 할 수 있다.
- 예를들어 mvn compiler:compile은 'compiler' 플러그인에서 'compile' 기능(goal)을 실행한다는 것을 뜻 한다.
- 아래는 package phase가 실행되기 전에 완료되야 하는 phase와 Goal이다.
3. Maven 디폴트 Phase와 Goal
process-resources
- resources:resources Goal이 실행 된다.
- Maven Resources Plugin
- <resource> directory(/src/main/resources)를 <outputDirectory>에 생성 한다.
compile
- resources:resources, compiler:compile Goal이 실행 된다.
- Maven Compiler Plugin
- 소스 코드를 컴파일해서 클래스를 <outputDirectory>에 생성 한다.
test-compile
- compiler:compile, compiler:testCompile Goal이 실행 된다.
- 테스트 소스 코드를 컴파일 한다.
test
- compiler:compile, compiler:testCompile, surefire:test Goal이 실행 된다.
- Maven Surefire Plugin
- junit과 같은 테스트 코드를 실행, 테스트가 실패하면 빌드를 멈춘다
- target/surefie-reports디렉토리 안에 test 리포트 파일을 생성한다
- 단위 테스트 코드가 깨져도 빌드를 성공시키려면 maven.test.skip 속성을 true로 설정하면 된다.
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
package
install
deploy
clean
Reference