build.gradle.ktsに移行する! 変換編
以前記事にしたプロジェクトをbuild.gradleからkotlin-dslに移行します。プロジェクト構成などについてはそちらを参照ください。
Spring Boot 2.2.0のリリースに伴いコードを書き直しました (最終更新: 2019/11/14)
※ リンクの記事はspring-data-r2dbc などを入れていますが、これだとdependencyManagementを入れた場合バージョン違いで動かないので、一旦リアクティブなDBアクセスの部分 (adapters.persistence) は外しました。
.gradleファイルと.gradle.ktsファイルは共存できるので、一つずつ変換していくと楽です。
この記事とは別に、Tipsを別記事にまとめています。
setting.gradle.kts
rootProject.name = "demo" include(":domain", ":configuration", ":adapters:web", ":adapters:api", ":application")
adapters.api.gradle.kts
dependencies { implementation(project(":domain")) implementation(project(":application")) implementation("org.springframework.boot:spring-boot-starter-webflux") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") }
adapters.web.build.gradle.kts
dependencies { implementation(project(":application")) implementation(project(":domain")) implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.springframework.boot:spring-boot-starter-webflux") }
application.build.gradle.kts
dependencies { implementation(project(":domain")) implementation("org.springframework.boot:spring-boot-starter") }
configuration.build.gradle.kts
import org.springframework.boot.gradle.tasks.bundling.BootJar apply(plugin = "org.springframework.boot") apply(plugin = "io.spring.dependency-management") dependencies { implementation(project(":application")) implementation(project(":domain")) implementation(project(":adapters:web")) implementation(project(":adapters:api")) implementation("org.springframework.boot:spring-boot-starter-webflux") } tasks.getByName<BootJar>("bootJar") { mainClassName = "com.example.practice.PracticeApplicationKt" }
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.springframework.boot.gradle.plugin.SpringBootPlugin extra["kotlin.version"] = "1.3.50" plugins { id("java") id("org.springframework.boot") version "2.2.0.RELEASE" apply false id("io.spring.dependency-management") version "1.0.8.RELEASE" kotlin("jvm") version "1.3.50" kotlin("plugin.spring") version "1.3.50" } allprojects { group = "com.example" version = "0.0.1-SNAPSHOT" } repositories { mavenCentral() jcenter() } val ktlint: Configuration by configurations.creating dependencies { ktlint("com.pinterest:ktlint:0.34.2") // testImplementation 'org.springframework.boot:spring-boot-starter-test' } subprojects { apply(plugin = "kotlin") apply(plugin = "org.jetbrains.kotlin.plugin.spring") apply(plugin = "io.spring.dependency-management") dependencyManagement { imports { mavenBom(SpringBootPlugin.BOM_COORDINATES) } } java.sourceCompatibility = JavaVersion.VERSION_1_8 java.targetCompatibility = JavaVersion.VERSION_1_8 repositories { mavenCentral() } dependencies { implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") testImplementation("org.springframework.boot:spring-boot-starter-test") { exclude(group = "org.junit.vintage", module = "junit-vintage-engine") } testImplementation("io.projectreactor:reactor-test") } tasks { withType<Test> { useJUnitPlatform() } withType<KotlinCompile>().configureEach { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "1.8" } } } } tasks.register<JavaExec>("ktlint") { group = "verification" description = "Check Kotlin code style." classpath = ktlint main = "com.pinterest.ktlint.Main" args = listOf("adapters/**/*.kt", "application/**/*.kt", "configuration/**/*.kt", "domain/**/*.kt") // to generate report in checkstyle format prepend following args: // "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml" // see https://github.com/pinterest/ktlint#usage for more } tasks.named("check") { dependsOn(ktlint) } tasks.register<JavaExec>("ktlintFormat") { group = "formatting" description = "Fix Kotlin code style deviations." classpath = ktlint main = "com.pinterest.ktlint.Main" args = listOf("-F", "adapters/**/*.kt", "applicatiohn/**/*.kt", "configuration/**/*.kt", "domain/**/*.kt") }