Maven 이해
Maven 정의
Apache Maven은 자바용 프로젝트 관리도구로, Apache Ant의 대안으로 만들어졌다. Apache License로 배포되는 오픈 소스 소프트웨어다. ( 사전적 정의 )
- 필요한 라이브러리를 특정 문서(pom.xml)에 정의해놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운받아주는 통합빌드 프레임워크.
- jar 파일을 직접 다운로드 받아 등록할 필요 없이, 필요한 것을 pom.xml에 명시해놓으면 Maven이 알아서 다운받아 관리해준다.
- 소스 코드로부터 배포 가능한 산출물(artifact)을 빌드(build)하는 빌드 툴(build tool)
특징
- 빌드 절차 간소화
- 동일한 빌드 시스템 제공
- 프로젝트 정보 제공
장점
- 라이브러리 관리 매우 용이
- 프로젝트의 작성부터 컴파일 등 프로젝트 LifeCycle에 포함되는 각 테스트를 지원해줌
- war 파일 기반의 배포용으로도 자주 사용
Maven Pattern
- Build
- 소스 코드 컴파일
- 테스트 코드 컴파일
- 기타 패키지 생성을 위한 바이너리 생성
- Package
- 배포 가능한 jar, war, exe 파일 등 생성
- Test
- 단위 테스트(Unit Test)등을 실행
- 빌드 결과가 정상적인지 점검
- Report
- 빌드/패키지/테스트 결과를 정리하고, 빌드 수행 리포트 생성
- Release
- 빌드 후 생성된 아티팩트(artifact)를 로컬 혹은 원격 저장소에 저장(배포).
Maven Lifecycle
-
메이븐의 동작 방식은 일련의 단계(phase)에 연계된 goal을 실행하는 것이며 논리적인 작업 흐름인 단계의 집합이 Lifecycle임.
- 빌드 단계(build phases)들은 사전 정의된 순서대로 실행
- 모든 빌드 단계는 이전 단계가 성공적으로 실행되었을 때 실행됨.
-
빌드 단계는 goal들로 구성
- goal은 특정 작업, 최소한의 실행 단위(task)이다.
- 각 단계는 0개 이상의 goal과 연관(associate)됨.
-
3개의 표준 Lifecycle 제공
- clean: 빌드시 생성되었던 산출물 삭제.
- default: 일반적인 빌드 프로세스를 위한 모델.
- site: 프로젝트 문서와 사이트 작성 수행.
-
Compile(컴파일), Test(테스트), Package(패키지), Depoly(배포) 등의 과정은 빌드 Lifecycle에 속한다.
-
Maven은 모든 빌드 단위에 대한 Lifecycle이 예약되어 있어서 개발자가 임의로 변경할 수 없다.
-
Phase(단계)
-
논리적인 개념이며, 실질적인 작업을 수행하는 것은 각각의 단계에 연결(associate) 플러그인인 goal이다.
-
패키지 타입(jar, war, ear 등)에 따라 각 단계에서 수행되는 goal이 달라질 수 있음.
-
default Lifecycle은 jar를 생성하는 작업들을 수행.
-
Phase간 의존 관계가 있음
-
ex) package phase가 수행되기 위해서는 이전 phase가 순서대로 수행된 다음에 실행됨.
-
-
-
Goal
- Maven이 행할 수 있는 여러가지 동작을 수행하는 명령
-
Phase와 Goal의 관계
- jar(플러그인):jar(goal명령) 으로 구성
- Maven에서 제공하는 모든 기능은 플러그인 기반으로 동작
- Phase를 실행하면 해당 Phase와 연결된 플러그인의 Goal 실행됨
- 각 phase는 0개 이상의 goal과 바인드 되어있음.
- Plugin Goal
- Maven에서 플러그인을 실행할 때, ‘플러그인Name:플러그인지원Goal’의 형식으로 실행
- ex) mvn compiler:compile → compiler 플러그인에서 compile 기능(goal)을 실행
donate.html