Gradle Spotless 적용하기

taetae98·2023년 7월 2일

thumbnail

Spotless

  • Keep your code spotless
  • 코드 컨벤션을 적용해주는 플러그인입니다.
  • 여러명이 개발하는 프로젝트에서 정해진 컨벤션을 자동으로 지정할 수 있습니다.
  • 빌드, 커밋 시 자동 실행. 컨벤션 지키지 않을 때 빌드 실패 등 커스텀 할 수 있습니다.
  • https://github.com/diffplug/spotless

적용

gradle 설정

프로젝트 build.gradle.kts

plugins {
    alias(libs.plugins.spotless)
    // or
    id("com.diffplug.spotless").version("6.19.0")
}

subprojects {
    // 모든 모듈 적용할 때 사용합니다.
    // 특정 모듈에만 적용하려면 모듈 build.gradle.kts에 직접 적용하면됩니다.
    plugins.apply(rootProject.libs.plugins.spotless.get().pluginId)
    // or
    plugins.apply("com.diffplug.spotless")

    configure<SpotlessExtension> {
        kotlin {
            target("**/*.kt")
            ktlint()
            indentWithSpaces()
            endWithNewline()
        }
        kotlinGradle {
            target("**/*.gradle.kts")
            ktlint()
            indentWithSpaces()
            endWithNewline()
        }
        java {
            target("**/*.java")
            indentWithSpaces()
            endWithNewline()
            removeUnusedImports()
        }
    }
}

spotless 설정

  • indentWithSpaces, endWithNewline spotless 옵션을 줄 수 있습니다.
  • ktlint, diktat 등 외부 플러그인을 쉽게 사용할 수 있습니다.
    • 외부 플러그인을 적용하면 버전에 따라 컨벤션이 달라질 수 있습니다.
    • ktlint("0.50.0") 같은 방식으로 특정 버전을 설정할 수 있습니다.
  • https://github.com/diffplug/spotless/tree/main/plugin-gradle

spotless 실행

  • ./gradlew spotlessCheck : spotless 컨벤션 검사
  • ./gradlew spotlessApply : spotless 컨벤션 적용, 적용할 수 없는 케이스는 에러가 발생합니다.

자동화

빌드 시 자동으로 적용

subprojects {
    /*
    
    */
    afterEvaluate {
        runCatching {
            tasks.getByPath("classes").dependsOn(tasks.spotlessApply)
        }
        runCatching {
            tasks.getByPath("preBuild").dependsOn(tasks.spotlessApply)
        }
    }
}

Git Hook


참고

profile
네이버 웹툰 안드로이드 개발자

0개의 댓글