跳转至

spotless Gradle Plugin v8.1.0

为什么要使用Spotless

想象一下这个场景:代码审查中,一半的评论在争论括号该换行还是放在行尾;提交历史里遍布着“修复格式”这样毫无意义的记录;团队中新来的成员小心翼翼,生怕自己的IDE设置与大家不同而提交“不整洁”的代码。我们与创意和逻辑的战争已经足够艰难,为何还要在分号与缩进的泥潭中自相残杀?

这就是代码格式的无声战争,它消耗热情,分裂团队,并默默侵蚀着项目的整洁度。我们渴望一致性,却疲于手动执行;我们推崇自动化,又恐于复杂的配置。正是在这种对整洁的渴望与维护整洁的疲惫之间的矛盾中,Spotless 像一位沉默而高效的守护者,登场了。它并非另一个需要你费力遵循的规则,而是一个自动将混乱化为秩序的承诺。使用 Spotless,不是为了约束,而是为了从琐碎中彻底解放,让每一次代码提交都专注于真正重要的创造与革新。

Spotless是什么

Spotless 是一款多功能的代码格式化工具。简而言之,它是一个能自动帮你整理代码的“管家”。无论是 Java、Kotlin、JavaScript、Markdown 还是其他多种语言的文件,Spotless 都可以根据你设定的规则,自动格式化代码、修复样式问题,甚至检查并阻止不规范的代码提交。它无缝集成在 Gradle、Maven 等构建工具中,在编译前悄然工作,确保你的代码库始终“一尘不染”。

入门示例

假设你正在开发一个基于 Gradle 的 Java 微服务项目,团队决定采用 Google Java Format 风格。没有 Spotless 时,你需要口头传达规则、依赖每个人的 IDE 配置,并在代码审查中手动指出格式问题。

有了 Spotless,一切变得简单。你只需在项目的 build.gradle 文件中添加并配置插件:

plugins {
    id 'com.diffplug.spotless' version '6.25.0'
}

spotless {
    java {
        // 指定使用 Google Java Format 风格
        googleJavaFormat()
        // 移除未使用的导入
        removeUnusedImports()
        // 格式化所有代码,而不仅仅是更改的部分
        formatAnnotations()
    }
}

配置完成后,你可以运行 ./gradlew spotlessApply 命令,Spotless 会自动扫描所有 Java 文件,并将它们一键转换为完美的 Google 风格。更妙的是,你可以在 CI/CD 流水线中加入 ./gradlew spotlessCheck 任务,如果代码格式不规范,构建将直接失败,从而彻底杜绝格式不统一的代码被合并。从此,团队再无需为缩进是 2 空格还是 4 空格、换行符如何放置而争论,可以将全部精力集中于业务逻辑和架构设计。

Spotless Gradle Plugin v8.1.0版本更新了什么

Spotless Gradle Plugin 8.1.0 版本聚焦于依赖更新和内部优化,为未来的功能奠定基础。其主要更新包括:将默认的 ktfmt、jackson 和 cleanthat 格式化工具升级到了最新版本,以获取错误修复和新特性。值得注意的是,它移除了对老旧 ktlint(1.0 以下版本)的支持,这可能影响仍在使用这些旧版本的项目。此外,插件内部改用更现代的 TaskProviders 来延迟任务初始化,并因此将最低支持的 Gradle 版本要求从 7.3 提升到了 8.1。最后,它修复了 palantirJavaFormat 在 Java 17 上被锁定旧版本的问题,并引入了 forbidModuleImports() 等新的 API 以增强代码检查能力。

更新日志

Changes(变更)

  • 将默认 ktfmt 版本从 0.58 升级至最新的 0.59
  • 将默认 jackson 版本从 2.20.0 升级至最新的 2.20.1
  • 将默认 cleanthat 版本从 2.23 升级至最新的 2.24
  • 可能存在破坏性变更:移除了对 ktlint 1.0 以下版本的支持。

Fixed(修复)

  • 修复了任务被过早初始化的问题,现已通过使用 TaskProviders 来避免此情况。
    • 可能存在破坏性变更:将最低支持的 Gradle 版本从 7.3 提升至 8.1。
  • 在 git pre-push 钩子中使用绝对路径。
  • 修复了 palantirJavaFormat 在 Java 17 上被强制设置为过时版本的问题,现在始终使用可获得的最新版本。

Added(新增)

  • 为 Java 格式器新增了 forbidModuleImports() API。
  • 新增了用于自定义 Flexmark(如允许 YAML 前端元数据)的选项。

总结

总而言之,Spotless v8.1.0 是一次以现代化和稳固性为核心的升级。它通过更新核心依赖至最新版、放弃对陈旧技术的支持、并提升底层构建平台要求,为项目注入了更强的生命力与兼容性。同时,它也带来了实用的新 API 并修复了关键问题,持续强化其作为代码整洁守护者的角色。