Files
llm-wiki/raw/official-docs/spotless-gradle-plugin-readme.md

87 lines
7.4 KiB
Markdown

---
title: Spotless Gradle Plugin — Official README (diffplug/spotless)
source_type: official-doc
url: https://github.com/diffplug/spotless/blob/main/plugin-gradle/README.md
archive_url: https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle/README.md
vendor: DiffPlug (diffplug/spotless)
related_branches: [feature-static-analysis-quality-contract]
related_projects: [ca-skeleton, ca-tmpl]
tags: [official-doc, ca-skeleton, ci-cd, gradle]
created: 2026-06-15
---
# Spotless Gradle Plugin — Official README (diffplug/spotless)
> Layer: `raw/` — 외부 자료(공식 문서)의 **원문 발췌·출처 기록**.
> 검증된 요약은 `/ingest` 후 `wiki/concepts/`에 `source-summary-template` 형식으로 별도 작성. 원본은 raw에 영구 보관.
## Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| [[raw/branch-notes/feature-static-analysis-quality-contract]] | D1/D9 — Spotless Gradle plugin(`com.diffplug.spotless`) 채택 + `spotlessCheck`(CI 검증) vs `spotlessApply`(자동수정) task 분리 + `googleJavaFormat` step 사용 + Gradle/JRE 버전 요건 확인 |
## 출처 / Source
- 원본 URL: https://github.com/diffplug/spotless/blob/main/plugin-gradle/README.md
- 아카이브 URL: https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle/README.md
- 저자 / 조직: DiffPlug (https://github.com/diffplug)
- 발행일: 공개 GitHub README (현재 버전 8.6.0 기준)
- 마지막 확인일: 2026-06-15
## 왜 저장했는지 / Why archived
`feature-static-analysis-quality-contract` 브랜치의 D1/D9 결정 — Spotless Gradle plugin 채택과 `spotlessCheck`/`spotlessApply` task 이중 운용 방식 — 의 공식 근거로 보관. Gradle 7.3 / JRE 17 최소 요건 및 `googleJavaFormat` 상세 옵션도 함께 수록되어 있어 구현 명세 작성에 직접 인용 가능.
## 핵심 인용 / Key quotes (verbatim, 5문장)
> [§Quickstart] "To use it in your buildscript, just [add the Spotless dependency](https://plugins.gradle.org/plugin/com.diffplug.spotless), and configure it like so:"
> [§Quickstart — console demo] " Run './gradlew spotlessApply' to fix these violations."
> [§Requirements] "Spotless requires JRE 17+ and Gradle 7.3 or newer."
> [§Disabling warnings and error messages] "The `check` task is Gradle's built-in task for grouping all verification tasks - unit tests, static analysis, etc. By default, `spotlessCheck` is added as a dependency to `check`."
> [§google-java-format] " googleJavaFormat('1.8').aosp().reflowLongStrings().formatJavadoc(false).reorderImports(false).groupArtifact('com.google.googlejavaformat:google-java-format')"
## Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| SPOTLESS-GRADLE-C1 | Spotless Gradle plugin의 ID는 `com.diffplug.spotless`이며, buildscript의 `spotless { }` 블록으로 포매터를 구성한다 | [§Quickstart] "To use it in your buildscript, just [add the Spotless dependency](https://plugins.gradle.org/plugin/com.diffplug.spotless), and configure it like so:" | `official-vendor-doc` | Gradle 프로젝트에 Spotless를 적용하는 모든 경우 | 특정 formatter 조합이 코드 품질을 보장한다는 뜻은 아님 |
| SPOTLESS-GRADLE-C2 | `spotlessCheck`는 위반 파일을 감지(수정 없음)하고, `spotlessApply`는 자동으로 수정한다; CI에서 `build` 태스크가 `spotlessCheck`에 의존한다 | [§console demo] "Run './gradlew spotlessApply' to fix these violations." | `official-vendor-doc` | Gradle CI 파이프라인에서 check/apply 분리 운용 | `spotlessCheck`가 모든 포매터 오류를 정확히 잡는다는 보장은 없음 |
| SPOTLESS-GRADLE-C3 | `spotlessCheck`는 Gradle의 `check` 태스크에 기본으로 의존성이 추가된다 | [§Disabling warnings] "By default, `spotlessCheck` is added as a dependency to `check`." | `official-vendor-doc` | Gradle `check` 태스크를 사용하는 모든 Spotless 프로젝트 | `enforceCheck false` 설정 시 이 기본 동작이 비활성화됨 |
| SPOTLESS-GRADLE-C4 | `googleJavaFormat('1.8')``.aosp()`, `.reflowLongStrings()`, `.formatJavadoc(false)`, `.reorderImports(false)`, `.groupArtifact(...)` 옵션을 체이닝할 수 있다 | [§google-java-format] "googleJavaFormat('1.8').aosp().reflowLongStrings().formatJavadoc(false).reorderImports(false).groupArtifact('com.google.googlejavaformat:google-java-format')" | `official-vendor-doc` | Java 포매터로 google-java-format을 사용하는 경우 | 특정 옵션 조합이 프로젝트의 기존 코드 스타일과 호환된다는 뜻은 아님 |
| SPOTLESS-GRADLE-C5 | Spotless 최신 버전은 JRE 17+ 및 Gradle 7.3 이상을 요구한다 | [§Requirements] "Spotless requires JRE 17+ and Gradle 7.3 or newer." | `official-vendor-doc` | 최신 Spotless 버전(`8.6.0` 기준)을 사용하는 Gradle 프로젝트 | JRE 11 또는 구형 Gradle 환경에서의 적용 여부(별도 구버전 필요) |
## Usage Boundaries / 적용 경계
- 이 자료가 직접 증명하는 것:
- `SPOTLESS-GRADLE-C1`: plugin id `com.diffplug.spotless` 가 공식 플러그인 식별자임
- `SPOTLESS-GRADLE-C2`: `spotlessCheck`(감지 전용) vs `spotlessApply`(자동수정) 역할 분리가 공식 설계임
- `SPOTLESS-GRADLE-C3`: `spotlessCheck``check` 태스크에 기본 wiring됨 — `./gradlew check` 시 자동 실행
- `SPOTLESS-GRADLE-C4`: `googleJavaFormat` 의 버전·스타일·옵션 체이닝 API 공식 형식
- `SPOTLESS-GRADLE-C5`: 최소 런타임 요건(JRE 17+, Gradle 7.3+) 공식 문서 명시
- 이 자료가 증명하지 않는 것:
- multi-module(subprojects) 에서의 공식 권장 패턴 — README는 `spotlessPredeclare`(루트에서 의존성 중앙화)만 설명하고, `subprojects { apply plugin: ... }` 패턴은 명시적 권고 없음
- `googleJavaFormat` 특정 버전이 ca-tmpl의 기존 코드베이스와 충돌 없이 동작한다는 것
- CI 환경(GitHub Actions 등)에서의 캐싱/성능 특성
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- ca-tmpl의 현재 Gradle/JRE 버전이 요건을 충족하는지 확인 (`SPOTLESS-GRADLE-C5` 적용 전)
- `googleJavaFormat` 버전을 `1.8` vs `최신`으로 고정할지 결정 — 버전 고정 시 `build-release-supply-chain-contract` 의 dependency locking 과 연동 필요
## 메모 / Notes
- 버전 8.6.0 기준 README. `CHANGES.md` 확인 시 마이너 버전별 API 변경 있을 수 있음.
- `spotlessPredeclare` 블록은 대형 멀티모듈 병렬 빌드에서 의존성 해석 충돌을 방지하는 공식 메커니즘. Isolated Projects와 비호환이므로 ca-tmpl에서 Isolated Projects 사용 여부 확인 필요.
- `ratchetFrom 'origin/main'` 옵션: 변경된 파일에만 포맷 강제 — "format-everything" 커밋 없이 점진적 도입 가능. 신규 feature 브랜치 도입 시 유용.
- `./gradlew spotlessApply -PspotlessFiles=<pattern>` 으로 특정 파일만 선택 적용 가능 (디버깅용).
## Related / 관련
- 같은 주제 다른 official-doc / company-tech-blog: 없음 (현재)
- 이 자료를 인용한 wiki 요약: `[[wiki/concepts/spotless-gradle-formatter]]` (생성 시)
- 연관 브랜치: [[raw/branch-notes/feature-static-analysis-quality-contract]]
- 연관 소스: [[raw/official-docs/archunit-user-guide]] — 같은 static analysis 브랜치의 ArchUnit 근거