Programing/Maven

Maven LifeCycle

BeomJun.Kwon 2022. 6. 29. 13:53

 

Maven LifeCycle

- Maven은 빌드 수명 주기의 중심 개념을 기반

- Phase 크게 3가지(default, clean, site)로 구분

  • clean - 3개
  • phase default - 23개의
  • phase site - 4개의 phase

- 메이븐은 대부분의 빌드 작업 시에 플러그인을 활용하며 메이븐 엔진이 생명주기 단계들과 플러그인을 바인딩 시켜 빌드 작업을 컨트롤

 

 

Phase 란?

Phase 순서에 따라 Phase에 바인딩된 Goal이 실행되는 구조를 가지고 있다. 각 Phase는 의존관계를 가지고 있으며 순서대로 실행이 된다. Phase에 아무런 Goal이 없다면 해당 Phase는 실행이 되지 않는다.

 


Clean Lifecycle

[1] pre-clean

     프로젝트 클리닝을 위한 준비 ( 생성된 target 폴더를 삭제 )

[2] clean

     이전 빌드에서 생성된 모든 파일을 정리

[3] post-clean

     정리과정 마무리



Default Lifecycle

[1] validate

     프로젝트 상태 점검, 빌드에 필요한 정보 존재 유무 체크

     현재 설정과 POM의 내용이 유효한지 확인. 이 과정은 POM.XML 파일 트리 구조를 검증
[2] initialize

     빌드 상태를 초기화, 속성 설정, 작업 디렉터리 생성 빌드 사이클에서 수행할 주요 작업 이전에 초기화를 할 수 있는 순간
[3] generate-sources

     컴파일에 필요한 소스 생성

     코드 생성기가 이 다음의 단계들에서 컴파일 되고 처리할 소스 코드를 생성하기 시작하는 순간

[4] process-sources

     올바른 위치에 코드를 배치하여 소스 코드를 처리

     소스의 파싱, 수정, 변경을 제공. 일반 코드 또는 생성된  코드 모두 여기서 처리

[5] generate-resources

     리소스 정보를 생성

     패키지에 포함될 자원 생성 소스 코드가 아닌 리소스를 생성하는 단계

     보통 메타데이터 파일과 설정 파일을 포함
[6] process-resources

     리소스를 올바른 폴더에 넣어 처리

     이전 과정의 소스 코드가 아닌 리소스 파일들을 다룸. 이 단계에서 리소스 파일들이 수정, 변경, 재배치
[7] compile

     소스 코드를 컴파일. 컴파일된 클래스들은 타깃 디렉터리 트리 구조에 저장

     (eclipse) 성공적으로 컴파일이 된다면 target/classes(default path) 폴더가 만들어지고 컴파일된 class 파일이 생성된다.
[8] process-classes

     생성된 컴파일된 클래스의 처리. 예) 바이트코드 강화, 바이트코드 난독화 등

     클래스 파일 변환과 개선 단계를 다룸. 바이트 코드 위버(weaver)와 instrument 도구가 동작하는 단계
[9] generate-test-sources

     테스트 소스 코드를 생성

     단위 테스트 코드를 생성하는 모조가 동작하는 순간
[10] process-test-sources

     테스트 소스 코드의 처리

     컴파일하기 전에 테스트 소스 코드에 필요한 작업을 수행. 이 단계에서 소스 코드는 수정, 변환 또는 복사될 수 있다.
[11] generate-test-resources

     테스트를 위한 리소스(자원) 생성
[12] process-test-resources

     테스트 대상 디렉터리에 자원을 복사하고 가공

     테스트 관련 리소스 처리, 변환, 재배치가 가능
[13] test-compile

     테스트 소스 코드의 컴파일

     단위 테스트 소스 코드를 컴파일
[14] process-test-classes

     컴파일 후 후처리( 컴파일된 테스트 클래스 파일의 처리, 바이트 코드 향상, 코드 난독화 등 )
[15] test

     컴파일된 단위 테스트를 실행하고 그 결과를 표시

     junit과 같은 단위 테스트 프레임워크를 사용하여 생성된 테스트 케이스를 실행

     실패시 빌드 종료

     (eclipse) target/test-classes 폴더와 안에 컴파일된 class파일이 생성되고 target/surefire-reports ( surefire : 테스트를 위한 플러그인 필요 )

                    폴더에 테스트 결과가 기록됩니다.

[16] prepare-package

     사전 패키징 작업을 수행합니다. 이 단계가 끝나면 포장을 풀고 처리된 버전을 출력
[17] package

     실행 가능한 바이너리 파일들을 jar, war 같은 배포용 압출 파일로 묶음 ( 패키징 수행 )

     (eclipse) target에 배포용 압축 파일 생성 ( 배포용 압출 파일 종류는 pom.xml에 설정 )
[18] pre-integration-test

     통합테스팅 전 사전작업

     통합 테스트는 실제 배치 환경의 코드를 테스트 하는 것을 말함. 이 단계에서 위에서 묶은 압축 파일을 서버에 배치 할 수 있음
[19] integration-test

     실제 통합 테스트를 수행
[20] post-integration-test

     통합테스팅 후 사후작업

     통합 테스트 준비 상태를 해제. 테스트 환경의 리셋 또는 재초기화 과정을 포함 할 수 있음
[21] verify

     배치 가능한 압축 파일의 무결성과 유효성을 검증 ( 품질 기준에 적합한지 검사 )
[22] install

     패키지를 로컬 저장소에 설치

     압축 파일을 로컬 메이븐 디렉터리에 추가 ( 이것에 의존하는 다른 모듈들을 사용 할 수 있게 됨 )

         ex) C:\dev\apache-maven-3.8.4\{local repository}\com\test\projectname\1.0.0-SNAPSHOT

[23] deploy

     패키지를 원경 저장소에 배포

     원격 레파지토리가 등록되어 있다면 해당 원격(Nexus 등) 레파지토리에 배포하게 됨
     없으면 해당 레파지토리 경로에 생성


Site Lifecycle

[1] pre-site

     프로젝트 사이트 생성 이전의 프로세스를 실행
[2] site

     프로젝트 사이트 문서 생성
[3] post-site

     사이트 생성을 마무리하고 배포 준비
[4] site-deploy

     문서를 웹 사이트에 배포

 

 

 

 

 

 

 

 

 

 

 

(참조) https://maven.apache.org/guides/introduction

(참조) https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

(참조) https://nesoy.github.io/articles/2021-03/maven-lifecycle

(참조) https://javacan.tistory.com/entry/MavenBasic

(참조) https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev:dep:build:maven 

'Programing > Maven' 카테고리의 다른 글

(Eclipse) Maven 속성 및 설정  (0) 2022.10.03
Maven Dependency | Packaging VS (Tomcat)Server Deploy  (0) 2022.08.12
Maven Build vs Java Project Build(eclipse)  (0) 2022.07.07
Maven Eclipse Setting  (0) 2022.07.07