2021-07-17-maven-01.md
메이븐 파헤치기
라이프 사이클
- 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
- pre-site, site(사이트 생성), post-site, site-deploy(사이트를 설정된 서버에 배포)
-
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