Multi Module ProjectのSpring Boot × Kotlin Applicationにdetektを導入する
仕事で使うことになったので勉強しました 😌
前回の記事 に適用します。
point
- ktlintはdetekt-formattingを利用する。そのためにmaven kotlinx repositoryを追加する
- multi moduleすべてを見るようにinput files を設定する
- checkでdetektも走るようにする
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // use kotlin 1.4.10 at dependecyManagement // https://github.com/spring-gradle-plugins/dependency-management-plugin/issues/235 extra["kotlin.version"] = "1.4.10" // detekt version (pluginとversionをあわせる) val detektVersion = "1.14.2" plugins { id("org.springframework.boot") version "2.3.4.RELEASE" apply false id("io.spring.dependency-management") version "1.0.10.RELEASE" id("com.google.protobuf") version "0.8.13" apply false id("java") // pluginを追加 id("io.gitlab.arturbosch.detekt") version "1.14.2" kotlin("jvm") version "1.4.10" apply false kotlin("plugin.spring") version "1.4.10" apply false } repositories { mavenCentral() jcenter() // for detekt org.jetbrains.kotlinx:kotlinx-html-jvm // これを入れないとdetekt pluginをinstallできない maven(url = "https://kotlin.bintray.com/kotlinx") } allprojects { group = "com.example" version = "0.0.1-SNAPSHOT" } subprojects { // 省略します ;-) } // ここからdetektの設定 detekt { toolVersion = detektVersion // default settingをoverrideする config = files("detekt/detekt.yaml") buildUponDefaultConfig = true // subprojectsのsrc/main|test/kotlinをチェックする val sources = subprojects.map { listOf("${it.projectDir}/src/main/kotlin", "${it.projectDir}/src/test/kotlin") }.flatten() input = files(sources) } // ktlintはdetekt pluginで設定可能なのでこちらを利用する project.dependencies { detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:$detektVersion") } // detektをcheckで実行 tasks.named("check") { dependsOn(tasks.named("detekt")) } tasks.withType<io.gitlab.arturbosch.detekt.Detekt> { jvmTarget = "11" }
kotlin
@SpringBootApplication class CleanApplication // detekt 検出を防ぐ @Suppress("SpreadOperator") fun main(args: Array<String>) { runApplication<CleanApplication>(*args) }
detekt-formattingを使っている記事が見つからなかったのでちょっとハマった 😔