그동안 Spring boot로 프로젝트를 만들면서 사용을 해왔지만, Gradle에 대해 공부를 한적은 없었다.
결국 Multi Module을 만드는 과정에서 많은 어려움을 겪고 있어 기본적인 Gradle을 알아보자.
Gradle
Ant나 Maven같은 기존 빌드 도구의 단점을 보완한, Groovy를 기반 오픈소스 빌드 도구이다.
Groovy도 공부해야 하나..?
Gradle의 특징
의존성 관리를 위해 다양한 방법을 제공하고 빌드 스크립트를 JVM에서 동작하는 Groovy 기반의 DSL(Domain Specific Language)를 사용한다.
Graddle wrapper를 사용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 잇다.
Gradle wrapper
시스템에 Java나 Gradle이 설치되어 있지 않아도 Gradle tasks를 실행할 수 있는 sciprt, jar 및 등록 정보 파일이다.
wrapper를 사용하면 새로운 환경에 설치할때 별도의 설치나 설정과정 없이 빌드 할 수 있어 wrapper 사용을 권장한다.
build.gradle
의존성, 플러그인 설정같은 빌드에 필요한 설정을 위한 빌드 구성 스크립트
Spring boot 앱을 만들면 다음과 같은 build.gradle파일이 생성된다.
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.zkdlu'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
하나하나 알아보자.
plugin 설정
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
-
org.springframework.boot
spring boot 플러그인
-
io.spring.dependency-management
사용중이 Spring boot에 맞는 버전의 라이브러리를 버전으로 가져온다.
> maven은 라이브러리 버전을 spring-boot-starter-parent에서 관리한다.
-
java
자바 프로젝트를 위한 빌드 등의 task를 제공한다.
프로젝트 정보
group = 'com.zkdlu'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
-
group
프로젝트 그룹
-
version
프로젝트 버전
-
sourceCompatibility
java 버전
repository 설정
repositories {
mavenCentral()
}
gradle은 maven repository, JCenter repository 등 다양한 repository를 제공한다
의존관계 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Gradle은 의존성 관리를 위해 여러 구성을 제공한다.
- compile : deprecated
- api : 기존의 compile과 동일
- implementation : compile과 동일하나, 모듈의 하위 의존 관계를 포함하지 않음.
- compileOnly : 컴파일 단계에서만 사용되며 런타임에서는 사용되지 않는다.
- annotationProcessor : 컴파일중에 사용되는 annotatino 프로세서
- runtimeOnly : 런타임에서 사용되는 라이브러리
- testImplementation : 테스트에서 사용되는 라이브러리
테스트
test {
useJUnitPlatform()
}
Junit5를 사용하기 위한 태스크, Gradle은 Test시 특정 테스트만 진행할 수 있다.