gradle
은 자바 웹 프로그래밍에서 자주 사용하는 빌드 도구다. 빌드 도구는 '빌드 자동화 툴'으로도 불린다. 말 그대로 무언가를 만들 때 편리함을 더하기 위해 사용하는 자동화 도구다. Gradle
은 이전 세대의 빌드 도구인 Ant
와 Maven
의 장점을 더하고, 단점을 보완해 만들어졌다. 현재 가장 진보한 버전의 자바 웹 프로그래밍 빌드 도구라 할 수 있다.
Gradle
을 사용할 때 가장 큰 편익 중 하나는 라이브러리 관리가 간편해진다는 점이다. build.gradle
을 통해 의존이 필요한 라이브러리 주입이나 플러그인 설정을 할 수 있다. 아래와 같이 build.gradle
을 통해 간단한 방법으로 필요한 라이브러리를 추가하거나 버전을 변경할 수 있다.
repositories
: 아래 dependencies에 추가되어 있는 라이브러리를 다운로드는 곳이다. mavenCentral()에서 junit과 assertj를 다운로드 받고 있다는 것을 알 수 있다.
dependencies
: 다양한 의존 관계 설정을 할 수 있다. 빌드 도구 없이 순수 자바 웹 프로젝트 파일을 만들게 되면 필요한 라이브러리를 jar 파일 형태로 직접 추가해야한다. dependencies
을 이용하면 위와 같이 간단하게 라이브러리를 추가하거나 버전을 변경할 수 있다.
1) api / compile / implementation
: 프로젝트 컴파일 과정에서 필요한 라이브러리를 의미한다. api
와 compile
은 기본적으로 동일한 기능을 수행한다. apply plugin이 java-library
일 경우엔 api
를 사용하고, java
일 경우엔 compile
을 사용한다.
implementation
와 api
의 차이점은 '프로젝트 소스의 일부로 포함을 하는가?' 여부에 있다. api
를 사용하면 종속 관계에 있는 라이브러리의 코드를 볼 수 있다. 하지만 implementation
을 사용하면 종속 관계에 있는 라이브러리의 코드를 볼 수 없다.
예를 들어, Library 1
이 Library 2
를 사용하는 종속 관계일 때, api
를 사용하면 프로젝트에서 Library 2
의 코드를 볼 수 있다. 반면, implementation
를 사용하면 Library 2
의 코드를 볼 수 없다.
2) runtime
: 프로젝트 실행 과정에서 필요한 라이브러리를 의미한다.
3) testCompile / testImplementation
: 프로젝트의 테스트 소스를 컴파일하고 실행하는 데 필요한 라이브러리를 의미한다. JUnit이 대표적이다.
4) testRuntime
: 테스트 실행 과정에서 필요한 라이브러리를 의미한다.
학습 및 포스팅 작성에 참고한 링크:
1) https://yeonyeon.tistory.com/89
2) https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html#sec:configurations_java_tutorial