스프링부트 2.2.2 + 자바11 + mariadb 설정
plugins 에 들어가는 버전 관리
https://docs.gradle.org/current/userguide/plugins.html#sec:plugin_version_managemen
링크의 pluginManagement 부분을 활용해서 반복되는 코틀린 버전 부분을 별도 gradle.properties
로 관리합니다.
build.gradle.kts
plugins
부분에서 apply false
가 들어가는 이유는 plugins
에 선언하는 경우 바로 적용이 되어버리기 때문에 일단 보류하고 적절한 sub 프로젝트에 apply
를 통해서 적용하기 위함입니다.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.2.2.RELEASE" apply false
id("io.spring.dependency-management") version "1.0.8.RELEASE" apply false
// kotlin 관련 버전은 settings.gradle.kts 와 gradle.properties 에 선언
kotlin("plugin.spring") apply false // The plugin specifies the following annotations: @Component, @Async, @Transactional, @Cacheable and @SpringBootTest.
kotlin("plugin.jpa") apply false // The plugin specifies @Entity, @Embeddable and @MappedSuperclass no-arg annotations automatically.
kotlin("jvm")
kotlin("kapt")
}
val queryDsl = "4.2.1"
val mariadb = "2.5.2"
repositories {
mavenCentral()
maven { url = uri("https://repo.spring.io/milestone") }
maven { url = uri("https://plugins.gradle.org/m2/") }
}
subprojects {
repositories {
mavenCentral()
maven { url = uri("https://repo.spring.io/milestone") }
maven { url = uri("https://plugins.gradle.org/m2/") }
}
apply(plugin = "java")
apply(plugin = "kotlin")
apply(plugin = "io.spring.dependency-management")
apply(plugin = "kotlin-jpa")
apply(plugin = "kotlin-kapt")
group = "me.saru"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
the<io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension>().apply {
imports {
mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
runtimeOnly("org.springframework.boot:spring-boot-devtools")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
testImplementation("org.springframework.security:spring-security-test")
implementation("org.mariadb.jdbc:mariadb-java-client:$mariadb")
implementation("com.querydsl:querydsl-jpa:$queryDsl")
kapt("org.springframework.boot:spring-boot-configuration-processor")
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict", "-Xallow-result-return-type")
jvmTarget = "11"
}
}
sourceSets {
kotlin.sourceSets.register("$buildDir/generated/source/kapt/main")
}
}
project(":common") {
dependencies {
kapt("com.querydsl:querydsl-apt:${queryDsl}:jpa")
}
}
project(":api") {
apply(plugin = "kotlin-spring")
apply(plugin = "org.springframework.boot")
dependencies {
implementation(project(":common"))
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
implementation("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.4.1")
implementation("org.thymeleaf.extras:thymeleaf-extras-springsecurity5")
}
}
gradle.properties
kotlinPluginVersion=1.3.61
이렇게 하지 않을 경우 gradle.build.kts 의 plugins 부분에 버전을 각각 적어줘야 합니다.
settings.gradle.kts
pluginManagement {
val kotlinPluginVersion: String by settings
plugins {
kotlin("jvm") version kotlinPluginVersion
kotlin("plugin.allopen") version kotlinPluginVersion
kotlin("plugin.noarg") version kotlinPluginVersion
kotlin("kapt") version kotlinPluginVersion
kotlin("plugin.jpa") version kotlinPluginVersion
kotlin("plugin.spring") version kotlinPluginVersion
}
}
rootProject.name = "saru-service"
include("api", "common")
ps1. 커맨드라인에서 특정 모듈만 빌드하는 경우./gradlew :api:clean :api:build
와 같이 진행한다.
ps2. gradle wrapper 생성은 gradle wrapper --gradle-version 6.1
참고
- https://kotlinlang.org/docs/reference/compiler-plugins.html#spring-support
- https://kotlinlang.org/docs/reference/compiler-plugins.html#jpa-support
- https://kotlinlang.org/docs/reference/using-gradle.html#targeting-the-jvm
- https://kotlinlang.org/docs/reference/kapt.html#using-in-gradle
- http://woowabros.github.io/tools/2019/04/30/gradle-kotlin-dsl.html
- https://not-for-me.io/post/gradle/01-basic-of-build-script/
- https://gradle.org/guides/
- https://docs.gradle.org/current/userguide/kotlin_dsl.html
- https://guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/#migration_strategies
- http://ddmix.blogspot.com/2019/10/get-used-to-gradle.html