본문 바로가기
JAVA/Java

빌드 자동화 도구 Gradle vs Maven

by KkingKkang 2023. 7. 17.
  • Maven : 스프링 프로젝트 pom.xml
  • Gradle : 스프링부트, 안드로이드

 

Maven

  • 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운받아준다.
  • Maven은 프로젝트의 전체적인 라이프사이클을 관리하는 도구이다.
  • Maven은 JDK설치와 같이 설치할 수 있다.

Maven 의 Lifecycle

  • 미리 정의하고 있는 빌드 순서라이프 사이클이라고 한다.
  • 각 빌드 단계를 Phase라고 하는데, 이런 phase들은 의존관계를 가지고 있다.
  • clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
  • validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
  • compile : 프로젝트의 소스코드를 컴파일하는 단계
  • test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
  • package : 실제 컴파일된 소스코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
  • install : 패키지를 로컬 저장소에 설치하는 단계
  • site : 프로젝트 문서를 생성하는 단계
  • deploy : 만들어진 package를 원격 저장소에 release하는 단계

 

POM - Project Object Model

  • 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등
  • 빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인 등 빌드와 관련된 설정
  • 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
  • POM연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

 

Gradle

  • 기본적으로 빌드 배포 도구이다.
  • 스크립트 언어로 구성되어 있기 때문에, XML과 달리 변수 선언, if, else, for 등의 로직이 구현가능하여 간결하게 구성 가능하다.
  • 라이브러리 관리 : 메이븐 레파지토리를 동일하게 사용할 수 있어서 설정된 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있다.
  • 프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.
  • 단위 테스트 시 의존성 관리 : junit등을 사용하기 위해서 명시한다.

 

Gradle이 Maven보다 좋은점

  • Build라는 동적인 요소를 xml로 정의하기에는 어려운 부분이 많다.
    • 설정 내용이 길어지고 가독성 떨어짐
    • 의존관계가 복잡한 프로젝트 설정하기에는 부적절
    • 상속구조를 이용한 멀티 모듈 구현
    • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함(상속의 단점 생김)
  • Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
    • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
    • 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
  • Gradle이 메이븐보다 최대 100배 빠르다
반응형

'JAVA > Java' 카테고리의 다른 글

JAVA stream  (2) 2023.10.18
DAO생성에서 확인하고 넘어갈 개념 4가지  (0) 2023.07.17
기능문자 / 서식문자 / 지정자  (0) 2023.03.31
클래스의 구조  (0) 2023.03.30
자바 언어 개요  (0) 2023.03.28

댓글