1 minute read

메이븐 파헤치기

라이프 사이클

  • maven이 미리 정의하고 있는 빌드 순서(기본으로 제공하는 메이븐의 빌드 단계).
  • maven에서 clean, build, site의 세가지가 있다.
  • maven에서 모든 빌드단위에 대한 Lifecycle이 예약되어 있고, 이것은 개발자가 변경할수 있는것이 아니다.
  • 각 라이프사이클은 순서를 갖는다. 이를 Phase라는 단어를 사용한다.
  • 라이프사이클 이해를 위해 goal과 phase를 이해하자!!!

    각 라이프 사이클 대표 단위/과정

  • clean

    메이븐 빌드를 통하여 생성된 모든 target 디렉토리(산출물)를 삭제.

    • pre-clean, clean, post-clean
  • build(default lifecycle) :

    소스 코드를 컴파일(compile), 테스트(test), 압축(package), 배포(depooy)를 담당하는 기본 라이프사이클

    • compile : 컴파일된 파일을 target/classes 폴더에 복사.
    • test : JUnit, TestNG와 같은 단위테스트 프레임워크로 단위 테스트 진행.
      • default 설정 : test 실패시 빌드 실패.
    • package : test 선행 후에 pom.xml의 값(jar, war, ear 등)에 따라 압축한다.
    • install : package선행 후에 local repogitory에 파일 배포.
    • deploy : install 선행 후에 nexus와 같은 원격 maven저장소에 release하는 단계

      • distributionManagement 등이 pom에 기술 되어야 함다.
  • site

    프로젝트 문서 사이트를 생성

    • pre-site, site(사이트 생성), post-site, site-deploy(사이트를 설정된 서버에 배포)

      PHASE와 GOAL

      PHASE

  • Build 라이프사이클 각각의 빌드 단계를 의미.

  • 특정 순서에 따라 Goal이 실행되도록 구조를 제공만 함.

    • 빌드 과정에서 phase가 빌드 작업을 하지는 않는다. 실질적인 빌드 작업은 각 phase에 연결되어 있는 플러그인의 goal.
  • 각 Phase간의 의존 관계가 있다.
     $ mvn test // test phase 실행시 phase실행순서 아래 ↓ ↓ ↓ 
    
    graph TD
        a[process]-->b["resources(resources:resources)"]
        b["resources(resources:resources)"]-->c["compile(compiler:compile)"]
        c["compile(compiler:compile)"]--> d["process-test-resources(resources:testResources)"]
        d["process-test-resources(resources:testResources)"]-->e["test-compile(compiler:testCompile)"]
        e["test-compile(compiler:testCompile)"]-->f["test(surefire:test)"]
    

GOAL

  • Maven이 행할수 있는 여러가지 동작을 수행하는 명령
 $ mvn [-option] [<goal(s)>] [<phase(s)>]
  • 종류

    • clean : target 폴더-complie 결과물- 삭제.

    • compile : 컴파일된 파일을 target/classes 폴더에 복사.

    • package : compile선행 후에 test, packaging 수행.

    • install : package선행 후에 local repogitory에 install 수행

    • deploy : install 선행 후에 nexus와 같은 원격저장소에 release하는 단계

      • distributionManagement 등이 pom에 기술 되어야 함다.

        관계 : PHASE와 GOAL

  • Phase가 실행되면, 연결된 플러그인의 goal이 실행됨.
  • Phase는 0또는 1개 이상의 Goal이 바인드되어있다.
    • 메이븐의 플러그인은 하나이상의 goal의 집합체라고도 할 수 있다.
    • ex) phase : package → goal : jar:jar
  • 명령어 읽어보기 :
       //compiler 플러그인에서 goal은 compile을 실행하라.
       $ mvn  compiler:compile 
        
       // claean phase실행하는데 compiler 플러그인에서 compile goal을 실행하라.
       $ mvn  clean compiler:compile // 
    
  • 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

Comments