2014년 2월 26일 수요일

Maven 핵심개념 - Plugin,Goal,Phase,생명주기

원문 : http://demon92.tistory.com/14

1. Plugin,Goal

이번글에서는 maven에 관련된 몇가지 개념과 maven 생명주기에 대해서 정리해본다.
이전(http://demon92.tistory.com/12) 글에서 아래의 명령으로 기본적인 프로젝트를 생성했다

mvn archetype:generate -> archetype은 plugin, generate는 Goal이다.
단순하게 말해서 Maven은 설치만 해서는 아무것도 못한다. 즉 maven은 자체로는 아무런 처리능력이 없다. 몇개의 XML 문서를 파싱하고 생명주기와 몇가지 플러그인의 추적을 유지하는 것 이외에는 어떻게 처리할지 모른다.
maven으로 의미있는 작업을 하기위해서는 Plugin을 다운 받아야 한다.(명령을 실행하면 자동적으로 다운을 받는다).  Maven은 대부분의 책임을 maven 생명주기에 영향을 주고 goal에 대한 접근을 제공하는 Plugin에 위임하도록 되어 있다. Plugin은 여러개의 Goal를 가지고 있고 Goal은 Plugin에 포함되어 있는 명령이다. 즉 Maven의 Plugin은 하나이상의 Goal의 집합체이다. 

 
그럼 Goal은?  goal은 Maven에서 단위 작업 즉 명령이라고 생각하면 된다. 
소스코드를 compile하는 compiler Plugin의 compile goal 또는 단위 테스트를 실행할수 있는 Surefire Plugin의 test goal를 들수 있다. 아울러 goal은 기능을 변경하는데 사용될 수 있는 설정 속성을 설정된다.
예를 들면 Compiler plugin의 compile goal은 대상 JDK버전을 지정할수 있다 뒤에 이 부분은 다시 다룬다.

2. Phase

Phase를 이야기하기 전에 maven의 Lifecycle에 대해 간단히 알아보면 Maven Lifecycle은 프로젝트를 
빌드하는데 관련된 순차적인 단계들이다 ( maven defaule lifecycle(http://demon92.tistory.com/2) 참고)
Maven은 수많은 생명주기를 지원하지만 가장 자주 사용되는것은 기본 Mavne 생명주기로 프로젝트의 기본적인 통합을 검증하는 단계로 시작해서 제품으로 프로젝트를 배포하는 것과 관련된 단계로 끝난다.
                
            

Phase는  maven의 Build Lifecycle의 한부분으로 각각의 Phase는 어떤 일을 할지 정의하지 않고 어떤 Goal을 실행할지 설정한다. 즉 Plugin의 goal은 생명주기 단계에 붙을수 있다
package Phase에서 Jar Plugin의 jar goal를 실행한다.        
        

각각의 Phase는 그 안에 0개이상의 goal를 가질수 있다  package Phase는 jar packaging과 같은 프로젝트의 jar 파일을 생성하는것으로 알고 있지만 maven은 생명주기의 특정 Phase가 실행이 되면 그 이전의 
모든 Phase를 순차적으로 모두 수행한다.  즉 mvn package를 실행할때 maven은 package단계까지 모든 Phase를 실행하고 생명주기 Phase를 거치는 과정에서 해당 Phase에 속한 모든 goal들을 실행한다. 
(아래 그림 참조)

mvn package를 실행하는 대신에 다음과 같이 일련의 plugin goal들을 지정함으로써 동일한 결과를 얻을수 있다
mvn resources:resources compiler:compile resource:testResources compiler:testCompile surefire:test jar:jar

댓글 없음: