나는 회사에서 일할때는 maven 만 사용해서 gradle은 사용해본적이 없었다.
하지만 공부할때 인강을 들으면서 gradle을 사용하는데 maven과 gradle 차이도 궁금하고 왜 gradle을 사용하는지 알고 싶어 gradle에 대해 검색해봤다.
Gradle 이란?
- Groovy 기반의 오픈소스 빌드 자동화 툴
- Ant -> Maven -> Gradle 순으로 발달
- 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구
- xml의 구조적 틀을 벗어나 코딩에 의한 간결한 정의 가능
- 프로젝트를 설정 주입 방식으로 정의
Ant
- XML 기반으로 작성한다.
- 생명주기를 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야한다.
- 간단하고 사용하기 쉽다
Maven
- XML 기반으로 작성한다.
- 생명주기(Lifecycle)와 프로젝트 객체 모델(POM)이란 개념이 도입됐다.
- pom.xml에 필요한 라이브러리를 선언하면 자동으로 해당 프로젝트로 불러와 편리하다.
Gradle의 특징
Gradle은 빌드 스크립트르 XML 언어가 아닌 JVM에서 동작하는 스크립트 언어 '그루비' 기반의 DSL를 사용한다.
그루비는 자바 문법과 유사하여 자바 개발자가 쉽게 익힐 수 있는 장점이 있다.
Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다.
메이븐의 pom.xml을 Gradle 용으로 변환할 수도 있다.
Gradle은 Maven repository , lvy directory 등 다양한 저장소를 지원한다.
Gradle Project 구성
gradlew : Unix용 실행 스크립트
gradlew.bat : Windows용 실행 스크립트
gradlew-wrapper.jar : Wrapper 파일
gradle-wrapper.properties: Gradle Wrapper 설정 파일
build.gradle : 의존성이나 플러그인 설정 등을 위한 스크립트 파일
settings.gradle: 프로젝트 구성 정보 기록
Gradle wrapper 란?
- 사용자가 Gradle을 설치하지 않았어도 Gradle tasks를 실행할 수 있도록 도움
- 프로젝트 생성자와 사용자가 동일한 버전의 Gradle 사용할 수 있음
build.gradle
plugins {
id 'org.springframework.boot' version '2.6.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
//lombok 설정 추가 시작
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
//lombok 설정 추가 끝
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'javax.inject:javax.inject:1'
implementation 'org.springframework.boot:spring-boot-starter-web'
//lombok 라이브러리 추가 시작
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//lombok 라이브러리 추가 끝
//json
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
//json 끝
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
plugins 설정
plugin은 미리 구성해 놓은 tasks들의 그룹이며, 특정 빌드과정에 필요한 기본정보를 포함하고, 필요에 따라 정보를 수정하여 목적에 맞게 사용할 수 있다.
저장소 설정
Gradle은 Maven repository , JCenter repository , lvy directory 등 다양한 저장소를 지원한다.
의존관계 설정
Gradle은 java의 의존성 관리를 위해 다양한 '구성'을 제공하고 있다.
- implementation : 프로젝트 컴파일 과정에서 필요한 라이브러리
- testImplementation : test시에 필요한 dependency 관리.
- providedCompile : compile 시에는 필요하지만 배포시에는 제외될 dependency를 설정한다.
- providedRuntime : runtime시에만 필요하고, 실행환경에서 제공되는 dependency를 설정한다. (web plugin이 설정된 경우에만 사용 가능)
테스팅
Gradle을 통해서 테스트 또한 간편하게 할 수 있다.
용어
Task : 작업의 최소 단위이다.
참고
1)https://yeonyeon.tistory.com/892
2)https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.6:dep:build_tool:gradle
'Gradle' 카테고리의 다른 글
이클립스에서 Gradle 프로젝트 셋팅 (0) | 2022.02.15 |
---|