작업 중인 프로젝트의 build.gradle 파일의 내용이 다음과 같다고 하자.
plugins {
id 'org.springframework.boot' version '2.6.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.pllap'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'
}
tasks.named('test') {
useJUnitPlatform()
}
가장 바깥쪽에는 plugins
, configurations
, repositories
, dependencies
블럭이 보인다. 스프링 프로젝트를 진행하며 의존성을 추가할 때는 dependencies
블럭 내부만 손대면 된다. 따라서 다른 블럭은 무엇을 하는 블럭인지 정도만 간단하게 알아보고, dependencies
블럭에 대해서는 다른 블럭들보다 살짝 더 자세히 이야기해 보려고 한다.
plugins
plugins {
id 'org.springframework.boot' version '2.6.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
plugins
블럭을 통해 프로젝트의 기능을 확장할 수 있다. 굳이 명시하지 않더라도 의존성을 추가해서 기능을 사용할 수는 있다. 하지만, 플러그인을 명시함으로써 보일러 플레이트 코드를 줄일 수 있다. 명시 가능한 플러그인의 목록은 gradle plugin repository에서 찾아볼 수 있다.
group
, version
, sourceCompatibility
group = 'com.pllap'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
build.gradle 내부에서 사용되는 설정을 정의한다. 여기서는 compileOnly
가 annotationProcessor
를 상속하도록 설정했다.
repositories
repositories {
mavenCentral()
}
의존성을 가져올 중앙 저장소를 정의한다. mavenCentral()
과 jcenter()
등의 메소드가 제공된다.
dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'
}
프로젝트에서 사용되는 의존성(라이브러리) 목록을 정의한다. 7.4.2 버전 공식 문서
gradle에서는 의존성을 가져오는 방법을 여러 가지 제공한다. 가져온 의존성을 컴파일 타임에만 사용하게 할 수도 있고, 런타임에만 사용하게 할 수도 있다. 의존성의 특성에 맞춰서 configuration을 잘 설정해 원하는 의존성을 적절하게 주입하면 배포 파일의 크기를 최적화할 수 있다.
configuration 목록은 문서에서 찾을 수 있다. 위에서 쓰인 것만 소개해 보자면 다음과 같다.
의존성은 그룹명:이름:버전
순으로 명시해서 주입할 수 있으며, 버전명은 optional로, 꼭 명시하지 않아도 된다. 또, 하단의 JWT 관련 설정들처럼 그룹명과 이름, 버전을 따로 명시할 수도 있다.
현재는 deprecated된 compile
등의 configuration도 존재하는데, 이것들에 대한 정보는 남아 있는 4.10.3 버전의 문서와 5.2.1 버전의 문서 등에서 확인할 수 있다.
task
tasks.named('test') {
useJUnitPlatform()
}
test
라는 이름의 task를 추가한다. 해당 task에서는 JUnit을 이용한다. 공식 문서