Gradle이란?
- Groovy를 기반으로 한 오픈소스 빌드 도구
- 거의 모든 타입의 소프트웨어의 빌드 가능
빌드?
- 소스 코드를 컴파일, 테스트, 정적분석을 실행하여 애플리케이션으로 만드는 과정
- 문제점: 라이브러리가 많이 생겨 버전관리 등에 큰 어려움이 생김
-이 문제점에서 빌드도구가 탄생
Groovy
- JVM에서 실행되는 스크립트 언어, Java를 기반으로 해서 매우 유사한 문법구조를 갖고 호환성이 좋다
장점
- 프로젝트 설정 주입 방식
- 미리 라이브러리를 준비하는 것이 아니라 프로젝트에 필요한 것을 찾아서 주입
- xml보다 가독성이 좋다.
- 멀티 프로젝트 빌드
- 하나의 repository 내에 다양한 하위 프로젝트를 구성가능
- 이때 똑같은 라이브러리를 중복처리 할 필요 없이 공통으로 설정
- 각 프로젝트에 필요한 라이브러리만 따로 설정해두면 됨
- gradle의 속도가 빠른 이유
- 점진적 빌드: 마지막에 빌드 이후 변경된 점이 없으면 빌드를 하지 않음
- 빌드 캐시: 빌드가 반복되면 캐시를 보내서 반복 빌드를 줄임
- 데몬 프로세스: 서비스 요청에 응답하기 위해서 빌드를 계속 유지
- maven보다 최소 2배 이상 빠름
의존성
: A객체는 B객체를 사용한다 : A는 B에게 의존
-
내부 의존성
- C->B->A
- C는 B가 A에게 의존하고 있음을 알고 있는가?
-
api: 내부 의존성을 컴파일, 런타임 모두 보임
- 컴파일 할 때도 참조하고, 런타임 할 때도 참조해서 rebuild가 두번 발생
-
implementation: 내부 의존성을 런타임에만 보임
- 런타임에 한 번 참조해서 한번만 rebuild
-
api => public
: api 의존성은 라이브러리 외부 프로젝트에 전이됨.
- 멀티 프로젝트인 경우, api로 선언하면 공통 라이브러리로 사용 가능
-
implement => private
: api 의존성은 라이브러리 내부 프로젝트에서만 사용. 외부 프로젝트에는 전이 되지 않음.