본문 바로가기

PROGRAMMING/MAVEN

MAVEN - plugin, phase, goal, LifeCycle

메이븐 책을 한 3번은 본 것 같다. 하지만 볼 때마다 아직도 깊은 이해가 가지 않아 블로그에 정리한다.

 

메이븐을 이해하기 위해서는 plugin, phase, goal, LifeCycle을 이해해야 한다.

이 네가지가 기본 개념이기 때문이다.

 

MAVEN PLUGIN

메이븐에서 제공하는 모든 기능은 플러그인을 기반으로 동작한다.

메이븐은 자체는 기본적인 기능만 가지고 있고 대부분의 기능들은 플러그인을 통해 제공하도록 되어있기 때문이다. 플러그인들은 몇가지 goal을 가지고 있고 goal은 플러그인에 포함되어 있는 명령이다.

즉, 플러그인은 하나 이상의 goal의 집합이다.

 

메이븐에서 활용할 수 있는 대부분의 플러그인은 다음 두 개의 사이트에서 제공하고 있다.

- 아파치 메이븐 사이트 http://maven.apache.org/plugins/

- 코드하우스 모조 프로젝트 http://mojo.codehaus.org/plugins.html

 

MAVEN GOAL

goal은 내가 실행할 명령이라고 생각하면 된다.

메이븐에서 기본 명령어는 이런 식이다. mvn [-option] [<goal(s)>] [<phase(s)>] 의 형태이다.

예를 들어 'mvn clean compiler:compile' 의 형태로 빌드를 실행했다면 이런 의미이다.

clean 페이즈를 실행하고, compiler 플러그인의 compile 골을 실행한다.

phase에 goal이 연결되어 있기 때문에 phase를 통해 메이븐 빌드를 실행하면 해당 phase에 연결되어 있는 goal이 실행된다.

 

MAVEN PHASE

phase의 사전적 의미는 단계이다. 메이븐에서도 phase는 단계를 의미한다. phase는 빌드 라이프사이클에서 빌드 단계와 각 단계의 순서만을 정의하고 있는 개념으로 빌드 과정에서 phase가 빌드 작업을 하지는 않는다. 아까도 말했다시피 실질적인 빌드 작업은 각 phase에 연결되어 있는 플러그인의 goal이 한다.

                         [메이븐 기본 페이즈와 골 간의 관계를 보여주는 화면]

 

보통 phase를 통해 goal을 실행하면 처음부터 해당 단계까지 모두 순차적으로 빌드가 실행된다.

예를 들어 mvn test라는 phase을 통해 빌드를 실행하면 log를 통해 process-resources(resources:resources), compile(compiler:compile), process-test-resources(resources:testResources), test-compile(compiler:testCompile), test(surefire:test) 순서로 phase가 실행되는 것을 볼 수 있다.

 

MAVEN LIFECYCLE

메이븐이 기본으로 제공하는 메이븐의 빌드 단계가 있다. 일반적으로 프로젝트를 빌드할 때의 과정을 보면 빌드 결과물 삭제, 컴파일에 필요한 자원을 복사, 소스 코드 컴파일, 테스트, 압축(패키지), 배포의 과정을 거치는데 이런 빌드 단계를 메이븐은 미리 정의하고 있다.

이와 같이 미리 정의하고 있는 빌드 순서를 라이프사이클이라 한다. 메이븐에서는 총 3개의 라이프사이클을 제공한다.

 

첫째, 소스 코드를 컴파일, 테스트, 압축, 배포를 담당하는 기본 라이프사이클

* 기본 라이프사이클의 각 페이즈

- compile : 소스 코드를 컴파일한다.

- test : Junit, TestNG와 같은 단위 테스트 프레임워크로 단위 테스트를 한다. 기본 설정은 단위 테스트가 실패하면 빌드 실패로 간주한다.

- package : 단위 테스트가 성공하면 pom.xml의 <packaging /> 엘리먼트 값(jar, war, ear 등)에 따라 압축한다.

- install : 로컬 저장소에 압축한 파일을 배포한다. 로컬 저장소는 개발자 PC의 저장소를 의미한다.

- deploy : 원격 저장소에 압축한 파일을 배포한다. 원격 저장소는 외부에 위치한 메이븐 저장소를 의미한다.

 

둘, 빌드한 결과물을 제거하기 위한 clean 라이프사이클

clean 페이즈를 실행하면 메이븐 빌드를 통하여 생성된 모든 산출물을 삭제한다. 메이븐은 기본으로 모든 산출물을 target 디렉토리에 생성하기 때문에 clean 페이즈를 실행하면 target 디렉토리를 삭제한다.

 

셋, 프로젝트 문서 사이트를 생성하는 site 라이프사이클

site 라이프사이클은 site와 site-deploy 페이즈를 이용하여 실행할 수 있다.메이븐 설정 파일의 정보를 활용하여 프로젝트에 대한 문서 사이트를 생성할 수 있도록 지원한다. site 페이즈는 문서 사이트를 생성하고, site-deploy 페이즈는 생성한 문서 사이트를 설정되어 있는 서버에 배포하는 역할을 한다.

 


 

참고 : 책 '자바 세상의 빌드를 이끄는 메이븐'

         블로그 하늘바람별(http://demon92.tistory.com)

'PROGRAMMING > MAVEN' 카테고리의 다른 글

MAVEN(메이븐)의 정의  (1) 2014.01.07