아파치 Ant의 대안이다.
프로젝트 진행시 사용하는 수많은 라이브러리들을 관리하는 도구
네트워크를 통해 라이브러리들과 연관된 라이브러리까지 연동되어 관리가 된다.
작업 의존성 그래프 기반
다중 모듈 빌드를 병렬 실행가능
maven의 기능을 이용하기 위해 pom 사용된다.
project object model의 정보를 담고 있는 파일.
pom.xml에서 주요하게 다루는 기능.
프로젝트 정보 : 프로젝트의 이름, 라이센스 등
빌드 설정 : 소스, 리소스, 라이프사이클별 실행한 플로그인 등 빌드와 관련된 설정
빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈
= Maven은 XML을 기반으로 의존성 (dependency) 및 디렉토리 구조 관리 등의 기능을 제공하며 한동안 많이 사용 됐다.
그러나 라이브러리가 추가되거나 각각의 라이브러리가 서로 다른 버전의 라이브러리를 참조하는 종속성을 가지고 있을 경우 관리가 어려워지는 문제가 있다. XML의 특징인 구조화는 장점이지만 문서의 양 자체가 비대해지는 단점이 있다.
=이에 대한 대안으로 Gradle이 각광받고 있다. Gradle은 JVM 기반의 빌드 도구다. Maven과 호환된다. 그 외에도 설정이 간편하고 프로젝트별로 유연하게 설정할 수 있는 장점이 있다. (스프링 부트 시작하기, 인사이트)
성능
⭐️ Incrementality 증분성 : Gradle은 가능한 경우 변경된 파일만 작업해 중복 작업을 피한다. → 증분 빌드
Build cache : 동일한 입력에 대해서 gradle 빌드를 재사용 한다.
Gradle 데몬 : 빌드 정보를 메모리에 유지하는 프로세스를 구동한다.
= Ant와 Maven의 장점들을 모아 개발해 2012년에 출시된 Groovy를 이용한 빌드 자동화 시스템
= 고정적이고 선형적인 단계의 모델 기반
빌드, 프로젝트 구성/관리, 테스트, 배포 도구
안드로이드 앱의 공식 빌드 시스템
빌드 속도가 Maven에 비해 10~100배 가량 빠름
JAVA, C/C++M Python 등을 지원
빌트툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능
=Gradle의 경우 별도의 빌드 스크립트를 통하여사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있습니다.
스크립트 길이와 가독성 면에서 gradle이 우세하다.
빌드와 테스트 실행 결과 gradle이 더 빠르다.
(gradle은 캐시를 사용하기 때문에 테스트 반복 시 차이가 더 커진다.)
의존성이 늘어날 수록 성능과 스크립트 품질의 차이가 심해질 것이다.
" maven은 프로젝트가 커질수록 빌드 스크립트의 내용이 길어지고 가독성이 떨어짐.
gradle은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성.
maven의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야함.
gradle은 설정 주입 방식을 사용 => 멀티 프로젝트에 매우 적합! "
Maven과 가장 큰 차이점으로 빌드시 중복으로 컴파일하지 않는다.
변경된 파일만 작업한다는 gradle의 증분 컴파일에 대한 볼만한 글.
동일한 코드에 대해 재컴파일을 방지하는 방법과 변경된 부분만 컴파일하는 증분 컴파일에 대한 이야기가 흥미롭다. 어노테이션에 대한 컴파일 이야기도 있다.