공부의 일상

[build tool] maven이란?

leeds123 2024. 8. 12. 22:36

빌드 관리 툴, maven

maven과 gradle은 자바의 빌드 관리 툴이다.

 

나는 처음부터 gradle만 사용해왔고, gradle만 보았다. 그런데 역시 다방면으로 경험해야 좋은 법...

maven으로 관리 되는 spring boot 프로젝트의 소스 코드를 볼 일이 생겼다.

maven에 대해서 알아보고자 한다.

 

특징

maven

- 과거 자바의 대표 관리 도구였던 Ant를 대체하기 위해 개발되었다.

- pom.xml (project object model) 파일로 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성을 관리한다. (xml 기반의 빌드 스크립트)

- 라이프 사이클이 존재한다.

 

라이프 사이클이란?

=> 미리 정해진 빌드 순서
maven은 작업 방식이 정해져있고, 빌드 순서가 정해져있어 라이프 사이클이 존재한다고 한다.
maven은 크게 3가지 라이프 사이클을 제공한다.
1. clean -> 이전 빌드에서 생성된 파일들을 삭제
2. Default -> 프로젝트 빌드 및 배포
3.Site -> 프로젝트 사이트를 생성

 

 

각 라이프 사이클은 사전에 정의된 작은 Phase를 가지고있다.

Phase는 시점을 의미하며, 순서에 따라 Phase에 바인딩 된 Goal이 실행된다.

각 Phase는 의존 관계를 가지며, 순서대로 실행된다.

 

1. clean -> 3개

2. Default -> 23개

3. Site -> 4개

참고

 

내가 가장 많이 쓰는 커맨드를 알아보면..

mvn clean package

이 코드의 의미는

Maven에서 두 가지 라이프사이클, Clean LifeCycleDefault LifeCycle을 연속적으로 실행한다.

 

clean 명령어는 Clean LifeCycle에 속한 Phase들을 모두 실행한다.

 

1. pre-clean (clean 작업을 준비 단계)

2. clean (이전 빌드의 산출물을 삭제, 기본적으로 target 디렉토리 삭제)

3. post-clean (clean 작업 후 추가적으로 필요한 정리 작업 수행)

 

즉, mvn clean을 실행하면 위의 세 가지 Phase가 순차적으로 실행되어 이전 빌드 결과물들이 삭제된다.

 

package 명령어는 Default LifeCycle에 속한 여러 Phase 중 package Phase까지 실행됩니다. 

 

  • validate: 프로젝트가 올바르게 구성되었는지, 모든 필요한 정보가 있는지 확인합니다.
  • compile: 소스 코드를 컴파일합니다.
  • test: 컴파일된 코드를 대상으로 단위 테스트를 실행합니다.
  • package: 컴파일된 코드를 JAR 파일이나 WAR 파일 등의 패키지로 만듭니다.

 

장점 및 단점

 

[장점]

1. pom.xml 파일을 통해 프로젝트 관리가 용이

2. 컴파일과 빌드를 동시에 수행 가능

 

[단점]

1. 특정 플러그인의 설정이 다를 때, 따로 분리해서 중복 기술해야한다. -> 가독성 저하, 유지 보수성 저하.

2. 느린 빌드 속도