2. Index
• Build-Tool
• Evolution & 2016 Usage Status Build
Tool
• Gradle?
• Gradle의 주요 특징
• Gradle 장,단점
• Ant, Maven, Gradle
• Maven, Gradle Build Script
• Links
3. • 빌드 ? 작성코드 + 의존성 라이브러리 → 컴파일 Compile → 패키징 Packaging
• 빌드 툴 ? 소스코드 컴파일 / 테스트 / 패키징 / 배포 / 문서화 하는 작업을 지원하는 툴
Java Build Tool
Build Tool
4. Evolution & 2016 Usage Status Build Tool
• 2000 - Ant
• 2002 - Maven
• 2004 - Ivy
• 2012 - Gradle
2016년 Java 빌드 툴 사용 현황
• Maven의 비율의 가장 높음
• 신규 프로젝트의 경우 대다수 Gradle 사용
참조 : https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016/
참조 : https://zeroturnaround.com/rebellabs/java-build-tools-part-2-a-decision-makers-comparison-of-maven-gradle-and-ant-ivy/
5. Gradle?
Gradle은 범용 빌드 툴 - Java, Java web, C, C++, Android … 20여 가지 언어 지원
• Groovy 언어 기반 (JVM 기반, 자바+파이썬+루비+스몰토크를 더한 동적 객체 지향 프
로그래밍 언어)
• Ant와 Maven을 계승, Ant(유연함) + Maven(체계성) + 스크립트 언어 (Groovy)
• Ant 와 Maven 빌드 툴 모두 가지고 있었던 가장 큰 단점인 XML 에 대한 이슈 Groovy
언어를 사용해 해결 (XML을 사용하지 않음)
∴ Gradle == 개발자 친화적(자유도) + CoC(Convention over Configuration)
- 명확한 관습으로 인해 더 편해진다.
6. Gradle의 주요 특징
• Groovy(JVM Language)를 기반으로 한 DSL (Domain Specific Language)
• Maven처럼 관례(Convention)에 기반한 프레임워크, 그러면서도 그 관례를 마음껏 바꿀 수 있다
• 다양하고 자유도가 높은 API 제공
• 심플한 프로젝트에서 거대한 엔터프라이즈 환경의 멀티 프로젝트 빌드까지 지원하는 확장성
• Ant 태스크와 빌드가 기본적으로 탑재 (기존에 작성된 Ant Task를 Gradle에서 직접 호출 가능)
• 기존의 어떠한 구조의 프로젝트라도 Gradle로의 통합 및 쉬운 마이그레이션
• 원격 레퍼지토리나 pom.xml, ivy.xml 도움 없이 이행적(transitive) 의존성 관리를 지원
• Gradle Wrapper를 사용하여 Gradle 이 설치되지 않은 환경에서 빌드 실행 가능
• Groovy 기반의 빌드 스크립트를 사용함으로써 third party libraries를 포함시키고 커스트마이즈 할 수 있다.
• 아파치 2.0 라이선스 (오픈소스 제공)
• Build scrip는 xml이 아닌 Groovy로 작성
7. Gradle 장, 단점
1. 간결함 : xml을 사용하지 않기때문에 장황하지 않음.
2. 속도 : 성능 향상을 위해 증분 빌드, 작업 결과 캐싱, 증분 하위 작업, 병렬 실행 등을 제공.
3. 멀티프로젝트 : 하나의 repository내에 여러 개의 하위 프로젝트 구성 가능. (상속x, 주입o)
4. 유연성 + 확장성 : 직접 Task 구현과 플러그인을 만들어서 기능을 추가 할 수 있음.
5. 플러그인 생태계 : 플러그인 관리를 위한 허브가 있고 그 안에는 수많은 플러그인이 존재.
• 장점
• 단점
1. Maven보다 컴파일/빌드 속도가 느리다.
2. IDE의 지원이 다소 미흡
3. 메모리 사용량이 많다. (권장 메모리 8GB, 4GB 메모리 사용시 Out of memory 발생 가능)
4. 이행적 의존성(transitive dependency) 충돌로 인해 자신도 모르게 지정한 것보다 높은
버전의 라이브러리를 받아오는 현상이 있음.(단점 이라기 보다는 Gradle의 의도)
9. Maven, Gradle Build Script
Maven의 pom.xml과 Gradle의 build.gradle
• Maven의 경우 사용자 지정 빌드 스크립트를 사용하기
힘들고 프로젝트의 규모가 커질 수록 코드라인이 길어짐
• Gradle의 Build Script는 Maven 보다 짧고 가독성이 좋음