이번 포스팅은 Maven에 특징인 LifeCycle에 대해 공부한 내용을 작성해 보겠다.
라이프 사이클 (LifeCycle)
먼저 메이븐을 이해하기 위해서는 Plugin, Phase, Goal, LifeCycle을 이해해야 한다.
위 네 가지가 기본 개념이다.
Plugin
메이븐에서 제공하는 모든 기능은 플러그인을 기반으로 동작한다.
메이븐은 자체는 기본적인 기능만 가지고 있고 대부분의 기능들은 플러그인을 통해 제공하도록 되어있기 때문이다. 플러그인들은 몇 가지 Goal을 가지고 있고 Goal은 플러그인에 포함되어 있는 명령이다.
즉, 플러그인은 하나 이상의 Goal의 집합체이다.
메이븐에서 활용할 수 있는 대부분의 플러그인은 아래 사이트에서 제공하고 있다.
아파치 메이븐 사이트 : https://maven.apache.org/plugins/
Maven – Available Plugins
Available Plugins Maven is - at its heart - a plugin execution framework; all work is done by plugins. Looking for a specific goal to execute? This page lists the core plugins and others. There are the build and the reporting plugins: Build plugins will be
maven.apache.org
Goal
goal은 내가 실행할 명령이라고 생각하면 된다.
예를 들어 'mvn clean compiler:compile'의 형태로 빌드를 실행했다면 이런 의미이다.
clean 페이즈를 실행하고, compiler 플러그인의 compile 골을 실행한다.
phase에 goal이 연결되어 있기 때문에 phase를 통해 메이븐 빌드를 실행하면 해당 phase에 연결되어 있는 goal이 실행된다.
Phase
phase는 빌드 라이프 사이클에서 빌드 단계와 각 단계의 순서만을 정의하고 있는 개념으로
빌드 과정에서 phase 가 빌드 작업을 하지는 않는다. 실질적인 빌드와 작업은 각 phase에 연결되어 있는
플러그인의 goal이 작업한다.
보통 phase를 통해 goal을 실행하면 처음부터 해당 단계까지 모두 순차적으로 빌드가 실행된다.
예를 들어 mvn test라는 phase을 통해 빌드를 실행하면
1. process-resources(resources:resources)
2. compile(compiler:compile)
3. process-test-resources(resources:testResources)
4. test-compile(compiler:testCompile)
5. test(surefire:test)
순서로 phase가 실행되는 것을 볼 수 있다.
주의할 점은Phase 는독립적이지 않다.
어떠한 phase는 그 앞에 특정 phase를 반드시 수행해야만 실행이 될 수 있다.
따라서 특정 phase를 실행 시 앞에 있는 phase들이 자동으로 순차적으로 먼저 실행해야 한다.
Lifecycle
메이븐이 기본으로 제공하는 메이븐의 빌드 단계가 있다.
일반적으로 프로젝트를 빌드할 때의 과정을 알아보면
1. 빌드 결과물 삭제
2. 컴파일에 필요한 자원을 복사
3. 소스 코드 컴파일
4. 테스트, 압축(패키지)
5. 배포
이런 빌드 단계를 메이븐은 미리 정의하고 있다. 이와 같이 미리 정의하고 있는 빌드 순서를 라이프사이클이라 한다.
메이븐에서는 총 3개의 라이프사이클을 제공한다.
Default
Default는소스 코드를 컴파일, 테스트, 압축, 배포를 담당하는 가본 라이프 사이클이다.
라이프 사이클의 각 phase들이 존재하는데 아래와 같다.
1. compile : 소스 코드를 컴파일한다.
2. test : Junit, TestNG와 같은 단위 테스트 프레임워크로 단위 테스트를 한다. 기본 설정은 단위 테스트가 실패하면 빌드 실패로 간주한다.
3. package : 단위 테스트가 성공하면 pom.xml의 <packaging /> 엘리먼트 값(jar, war, ear 등)에 따라 압축한다.
4. install : 로컬 저장소에 압축한 파일을 배포한다. 로컬 저장소는 개발자 PC의 저장소를 의미한다.
5. deploy : 원격 저장소에 압축한 파일을 배포한다. 원격 저장소는 외부에 위치한 메이븐 저장소를 의미한다.
각 phase들은 의존관계를 갖기 때문에 순서대로 실행된다. 예를 들어 package를 실행하면 test가 실행되고 test가 실행된다면 compile를 실행한다.
Clean
Clean 은 빌드한 결과물을 제거하기 위한 라이프 사이클이다.
Clean 실행하면 메이븐 빌드를 통하여 생성된 모든 산출물을 삭제한다.
메이븐은 기본적으로 모든 산출물을 target 디렉터리에 생성하기에 Clean 페이즈를 실행하면
target 디렉터리를 삭제한다.
Site
프로젝트 문서 사이트를 생성하는 site 라이프사이클이다.
site 라이프사이클은 site와 site-deploy를 이용하여 실행할 수 있다.
메이븐 설정 파일의 정보를 활용하여 프로젝트에 대한 문서 사이트를 생성할 수 있도록 지원한다.
site 페이즈 : 메이븐 기본 설정이다, 플러그 인 설정에 따라 target/site 디렉토리 문서 사이트를 생성한다.
site-deploy 페이즈 : 생성한 문서 사이트를 설정되어 있는 서버에 배포하는 역할을 한다.
📚 Reference
Maven – Introduction to the Build Lifecycle
The build lifecycle is simple enough to use, but when you are constructing a Maven build for a project, how do you go about assigning tasks to each of those build phases? The first, and most common way, is to set the packaging for your project via the equa
maven.apache.org
https://stackoverflow.com/questions/26607834/maven-lifecycle-vs-phase-vs-plugin-vs-goal/30953905
Maven: Lifecycle vs. Phase vs. Plugin vs. Goal
Relatively new developer here, even though I've been using it for a little while, I'm hoping to solidify my Maven fundamentals. Part of my problem is that I have no experience with Ant, which seems...
stackoverflow.com
https://www.yes24.com/Product/Goods/9470348
[전자책]자바 세상의 빌드를 이끄는 메이븐 - 예스24
실제 프로젝트로 학습하는 생생한 메이븐 활용 전략아파치 메이븐은 전자정부 프레임워크에서 표준 빌드 툴로 선정되었다. 이름은 익숙하지만, 국내 개발자들에게는 실체와 특징이 명확하지
www.yes24.com