https://gradle.org/maven-vs-gradle/
위 포스트 보고 번역. Gradle 입장에서 썼으니 당연히 장점/개선점 위주로 비교 했다.
1. Flexibility
Maven은 자바 기반의 프로젝트 관리만 가능하지만 Gradle은 자바 외에도 코틀린/C.C++ 등의 다른 언어 빌드가 가능하다.
물론 Maven도 커스텀해서 사용가능하지만, Gradle은 커스텀 과정을 모두 자동화 해두었고, 그 과정에서 발생하는 이슈도 충분히 신경 썼다.
사실 퍼포먼스가 가장 중요한데, 빌드 소요 시간을 기약적으로 향상시켰다는 게 Gradle이 강조하는 큰 강점이다. 어떻게 향상 시켰냐면,
- Incrementality: 태스크를 트래킹하며 필요할 때만(파일이 변경되었을때 라든지) 추가 작업함
- Build Cache : 동일한 input에 대해서는 output을 재사용함.(심지어 다른 머신 간에도)
- Gradle Daemon : 길게 살아있는 프로세스를 만들어 메모리 상에서 정보들을 보유하고 있도록 함.

3. User Experience
- IDE 와 연계된 다양한 지원(ex. modern CLI)
- 빌드 스캔이라는 interactive web-based UI를 제공한다.(들가보니 없는 페이지라고 해서 지금도 있는 기능인지는 모르겠다)

4. Dependency Management
- dependency selection을 통해 사용자가 의존성을 커스텀하여 사용할 수 있다.
- substitution rules을 통해 composing build가 가능하다.
- dependency scope을 커스텀할 수 있다. (maven built-in scope이 별로 없다.) Gradle에서는 unit and integration test를 구분하여 빌드 실행할 수 있다.
- 동일한 의존성이 여러개 존재하는 경우 가장 높은 버전을 찾아서 적용해준다. 물론 버전 다운 강제도 가능하다.
- 라이브러리를 만드는 사람은 api dependency와 implementation dependency를 취사 선택하여 원하지 않는 라이브러리가 소비자의 클래스패스로 들어가는 것을 방지할 수 있다.
(api vs implementation : https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation)