maven의 빌드 과정
메이븐이란?
메이븐은 빌드 관리 도구로써 JVM, WAS가 프로젝트를 인식하고 실행할 수 있게 작성한 소스코드, 프로젝트에 사용되는 파일들(xml, jar, properties)을 빌드하는 도구이다.
필자는 그래들(Gradle)을 사용하던 시점에서부터 자바 프로젝트를 진행해보던 사람이어서, 메이븐이라는 빌드도구를 주로 사용해서 개발해본적은 없다. 하지만, 메이븐은 자바 생태계에서 널리 사용되는 빌드 도구이고, 그래들 역시 메이븐의 표준 구조와 관습을 강하게 계승하고 있기 때문에 메이븐의 동작방식에 대해서 학습해보아야겠다는 생각을 했다. 이번글은 메이븐이 빌드를 진행할때 어떤 동작을 이루는지 정리해본다.
메이븐에게 빌드를 맡긴다면, 어떻게 동작할까?
전체적인 실행순서는 아래와 같다.
그림이 작아서 잘 보이지 않으니, 앞에서부터 설명하도록 하겠다.
- 메이븐에게 명령어가 전달되면, pom.xml에 파싱된 설정들이 로딩된다.
- 의존성들을 체크하고 필요한 의존성들을 자동으로 다운로드한다.
메이븐은 pom.xml을 통해서 개발자가 사용하고자 하는 패키지들의 버전을 편하게 관리한다. 더 자세한 pom.xml 동작을 공식문서에서도 소개한다.
그리고 Default 생명주기에 도달하여 단계별(Phase)로 실행된다.
각 단계(Phase)에는 아래와 같은 작업을 진행한다.
validate
: 프로젝트가 정확하고 필요한 정보가 모두 있는지 확인
compile
: 프로젝트의 소스코드를 컴파일
test
: 컴파일된 소스코드를 테스트
package
: 컴파일된 코드를 가져와서 JAR 같은 배포 가능한 형식으로 패키징
verify
: 품질 기준이 충족되는지 확인하기 위해 검사 시행
install
: 로컬 저장소에 패키지 설치해서 로컬의 다른 프로젝트에서 종속성으로 사용
deploy
: 원격저장소로 복사
기본 사이클(Default Cycle) 동작후에는 아래와 같은 단계를 거친다.
- 플러그인 실행
- 빌드 산출물(JAR/WAR) 생성
- 원격 저장소로 업로드를 진행하여 배포
마무리
메이븐의 빌드 과정에 대해서 알아보았다. 추가로 클린 생명주기(Clea LifeCycle), 사이트 생명주기(Site LifeCycle)가 존재하나 메이븐의 따른 특성있는 동작은 없고 일반적인 빌드,배포과정과 유사하다. 추가로 찾아볼 수 있는 레퍼런스 문서를 통해서 확인하면된다. 그래들은 메이븐의 표준 구조를 강하게 계승하고 있기 때문에, 메이븐 기초 지식은 그래들을 사용하는 개발자들에게 유용할 수 있다. 구조를 정리해보면서 개발에서 사용하는 여러 빌드 도구들을 탐구해보고 싶은 호기심이 생기는 시간이었다.