자바용 프로젝트 관리 도구로, 아파치에서 Ant 대안으로 만들어졌다고 함. 아파치 라이선스로 배포되는 오픈 소스 소프트웨어.
빌드 중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml에 명시하면, maven은 외부 저장소에서 필요한 라이브러리와 플러그인들을 다운로드 해서 로컬시스템의 캐시에 모두 저장한다.
특징적인 것은 우리가 사용하려고 명시한 라이브러리들과 연관된 라이브러리들까지 연동되어서 관리가 된다!(네트워크를 통해서 연관된 라이브러리까지 업데이트 해줌)
예를 들어 "Spring Boot Data JPA Starter" 모듈을 사용하고 싶을때 메이븐 레포지토리에서 해당 모듈을 검색하여 xml 설정파일에 추가하여 사용할 수 있음.
<!-- https:*//mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
2007년에 처음 개발되었고, 2013년에 구글에 의해 안드로이드 프로젝트의 빌드 시스템으로 채택되었다
-> 안드로이드 스튜디오의 공식 빌드 시스템
Groovy 언어를 사용한 빌드 자동화 시스템으로, Groovy와 유사한 도메인 언어 Domain-specific-language를 사용한다. -> xml 파일을 사용하는 maven보다 코드가 훨씬 간결함(Java와 거의 비슷한 코드를 써서 빌드 처리를 관리 할 수 있다.)
꽤 큰규모로 예상되는 multi-project 빌드를 도울 수 있도록 디자인되었다.
Gradle은 프로젝트의 어떤 task가 업데이트 되었고 안되었는지를 체크함. -> 빌드에 점진적으로 추가할 수 있다.
-> 업데이트가 이미 반영된 빌드의 부분은 즉 더이상 재실행되지 않는다. 따라서 빌드 시간이 훨씬 단축될 수 있다
아직까지는 Maven의 점유율이 더 높지만, Gradle이 조금 더 빠른 성능과 간결한 설정이 가능해서 인기가 많아지고 있음. 소규모 프로젝트에서는 큰 차이가 없어서 익숙한 maven을 사용하더라도, 규모가 커질수록 gradle을 사용하는 것이 더 유리하다고 함!!
maven 은 프로젝트가 커질수록 빌드 스크립트의 내용이 길어지고 가독성이 떨어지는 반면, gradle 은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성할 수 있다.
maven 의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만 gradle 은 설정 주입 방식으로 이를 해결한다.
또한 Gradle은 concurrent에 안전한 캐시를 허용한다.
-> 2개 이상의 프로젝트에서 동일한 캐시를 사용할 경우, 서로 overwrite되지 않도록 checksum 기반의 캐시를 사용하고, 캐시를 repository와 동기화시킬 수 있다.