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이다.
Phase | Goal |
---|---|
[ resources:resources ] | resources |
[ compiler:compile ] | compile |
[ resources:testResources ] | test-resources |
[ compiler:testCompile ] | test-compile |
[ surefire:test ] | test |
[ jar:jar ] | package |
[표] 디폴트 라이프사이클의 주요 단계(phase)
단계 | 설명 | 단계에 묶인 플러그인 실행 |
generate-sources | 컴파일 과정에 포함될 소스를 생성한다. 예를 들어, DB 테이블과 매핑되는 자바 코드를 생성해주는 작업이 이 단계에서 실행된다. | |
process-sources | 필터와 같은 작업을 소스 코드에 처리한다. | |
generate-resources | 패키지에 포함될 자원을 생성한다. | |
process-resources | 필터와 같은 작업을 자원 파일에 처리하고, 자원 파일을 클래스 출력 디렉토리에 복사한다. | resources:resources |
compile | 소스 코드를 컴파일해서 클래스 출력 디렉터리에 클래스를 생성한다. | compiler:compile |
generate-test-sources | 테스트 소스 코드를 생성한다. 예를 들어, 특정 클래스에서 자동으로 테스트 케이스를 만드는 작업이 이 단계에서 실행된다. | |
process-test-sources | 필터와 같은 작업을 테스트 소스 코드에 처리한다. | resources:testResources |
generate-test-resources | 테스트를 위한 자원 파일을 생성한다. | |
process-test-resources | 필터와 같은 작업을 테스트 자원 파일에 처리하고, 테스트 자원 파일을 테스트 클래스 출력 디렉터리에 복사한다. | |
test-compile | 테스트 소스 코드를 컴파일해서 테스트 클래스 추력 디렉터리에 클래스를 생성한다. | compiler:testCompile |
test | 테스트를 실행한다. | surefire:test |
package | 컴파일 된 코드와 자원 파일들을 jar, war와 같은 배포 형식으로 패키징한다. | 패키징에 따라 다름 jar - jar:jar war - war:war pom - site:attach-descriptor ejb - ejb:ejb |
install | 로컬 리포지토리에 패키지를 복사한다. | install:install |
deploy | 생성된 패키지 파일을 원격 리포지토리에 등록하여, 다른 프로젝트에서 사용할 수 있도록 한다. | deploy:deploy |
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
- package를 실행하면 compile, test-compile, test 순으로 실행된 다음 jar, war파일이 target 디렉토리 아래에 생성된다.
- 패키징에 따라 아래의 플러그 인을 사용한다.
- Maven Jar Plugin
- Maven WAR Plugin
- Maven EAR Plugin
install
- 로컬 리파지토리에 패키지를 배포 한다.
- Maven Install Plugin
deploy
- 원격 리파지토리에 등록하여, 다른 프로젝트에서 사용 할 수 있도록 한다.
- Maven Deploy Plugin
clean
- target 디렉토리의 결과물을 모두 제거한다.
- Maven Clean Plugin
Reference
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
- 자바 프로젝트 필수 유틸리티
- http://javacan.tistory.com/129
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/display/SWDEV/Maven+Lifecycle?
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
댓글 3개:
와 잘 읽었습니다. 감사합니다. :))
감사합니다~!
첫번째 표에서 phase와 goal이 순서가 바뀐거 같습니다.
댓글 쓰기