[Spring Boot] build.gradle 정리
![[Spring Boot] build.gradle 정리 [Spring Boot] build.gradle 정리](https://miro.medium.com/v2/resize:fit:1100/format:webp/1*o5FmjKTPdJTbhGE2MIjo6w.jpeg)
Last Updated: 2025년 07월 05일
개인적으로 만든 사이트의 build.gradle 최종 설정 내용
plugins {
id 'org.springframework.boot' version '3.5.3'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'jacoco'
id "org.asciidoctor.jvm.convert" version "4.0.4"
}
group = 'kr.narrator'
version = "0.0.1-${new Date().format('yyyyMMdd_HHmm')}"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
ext {
JJWT_VERSION = "0.12.6"
queryDslVersion = "5.1.0"
snippetsDir = file("build/generated-snippets")
}
configurations {
compileOnly { extendsFrom annotationProcessor }
asciidoctorExt
}
dependencies {
// Spring Boot Core
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// Optional Infra
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// AWS (확장 시 별도 모듈로 분리 고려)
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
// DB & JWT
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
implementation "io.jsonwebtoken:jjwt-api:${JJWT_VERSION}"
runtimeOnly "io.jsonwebtoken:jjwt-impl:${JJWT_VERSION}"
runtimeOnly "io.jsonwebtoken:jjwt-gson:${JJWT_VERSION}"
// https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-core
//implementation 'org.springframework.ai:spring-ai-core:1.0.0-M6'
// Swagger / OpenAPI
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.9'
// QueryDSL
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
annotationProcessor(
"jakarta.persistence:jakarta.persistence-api",
"jakarta.annotation:jakarta.annotation-api",
"com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
)
// MapStruct
implementation 'org.mapstruct:mapstruct:1.6.3'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.3'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
// Utils
implementation 'org.jsoup:jsoup:1.20.1'
// Java 8 Date and Time 타입 (LocalDateTime 등) JSON 직렬화를 위한 Jackson 모듈 추가
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
// Spring REST Docs
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Caffeine 캐시
implementation 'com.github.ben-manes.caffeine:caffeine:3.2.0'
// Testing
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
// QueryDSL 설정
def generatedDir = layout.buildDirectory.dir("src/main/generated")
tasks.withType(JavaCompile).configureEach {
options.compilerArgs << "-parameters"
options.generatedSourceOutputDirectory.set(generatedDir)
}
sourceSets.main.java.srcDirs += generatedDir
tasks.named('clean') {
doFirst {
delete generatedDir
}
}
// Test & Docs
test {
useJUnitPlatform()
outputs.dir snippetsDir
finalizedBy jacocoTestReport
}
// Jacoco 설정
jacoco {
toolVersion = "0.8.13"
}
tasks.named('jacocoTestReport') {
reports {
html.required.set(true)
xml.required.set(false)
csv.required.set(false)
}
}
tasks.named('asciidoctor') {
inputs.dir snippetsDir
configurations 'asciidoctorExt'
sources { include("**/index.adoc") }
baseDirFollowsSourceFile()
dependsOn test
}
tasks.named('bootJar') {
dependsOn asciidoctor
from("${asciidoctor.outputDir}") {
into 'static/docs'
}
}
// 테스트 코드를 제외한 빌드 수행 또는 gradle build -x test
tasks.withType(Test) {
enabled = false
}