如何实施一致的 Java 代码格式?

Ant*_*gos 28 java intellij-idea gradle

我正在寻找一种方法来强制开发人员使用相同的 Java 代码格式规则。我的要求是:

  1. Gradle集成
    1. 检查代码格式是否正确的任务。如果提交格式不正确的代码,这将用于 CI 导致构建失败

    2. 修复格式不正确的代码的任务(很好)

  2. IntelliJ 集成
    1. 可以通过“重新格式化代码”操作在 IDE 中修复格式不正确的代码
    2. IDE 生成的代码(例如 getter/setter 生成)符合规则
  3. 支持OpenJDK /Oracle Java 格式规则

目前我正在使用具有以下配置的Spotless

spotless {
  java {
    toggleOffOn()
    eclipse().configFile("${project.rootDir}/tools/eclipse-java-formatter.xml")
    indentWithSpaces()
    removeUnusedImports()
  }
}
Run Code Online (Sandbox Code Playgroud)

对于 IntelliJ 集成,我安装了Eclipse Code Formatter 插件并将其配置为使用与 Spotless 相同的规则。

除了 2.2 之外,这种方法满足上述所有要求,即 IntelliJ 生成的任何代码在符合格式规则之前都必须重新格式化。另一个问题是,当重新格式化代码时,导入似乎被任意重新排序。这会产生大量虚假更改,从而使拉取请求更难以审查。

是否有另一种方法(例如 CheckStyle)不受这些缺点的影响?

kek*_*kec 6

您可以使用Google Java Format,它具有上述 IDE(IntelliJ IDEAEclipse)的插件,它提供了与 Maven、Gradle 或 SBT 等工具的集成,并提供了将格式化程序作为预提交钩子当使用 Github 操作将代码推送到 Github

在他们的自述文件中,他们还提到了导入问题以及如何为 IntelliJ IDEA 修复它,并提供了更多见解,例如:关于如何在Spotless Gradle 插件上处理它,当使用Maven Spotless 插件时,或对于Github 操作

您的特定情况的一个缺点可能是该工具强制执行Google Java 样式指南如 Oracle Java 杂志中所述,该指南受到 Oracle Java 团队的赞扬和推荐。它还提供了使用AOSP 代码样式的选项

下面是一尘不染的Gradle 配置的片段,考虑到导入排序:

spotless {
    java {
        importOrder() // standard import order
        importOrder('java', 'javax', 'com.acme', '') // or importOrderFile
        // You probably want an empty string at the end - all of the
        // imports you didn't specify explicitly will go there.

        removeUnusedImports()

        googleJavaFormat() // has its own section below
        eclipse()          // has its own section below
        prettier()         // has its own section below
        clangFormat()      // has its own section below

        licenseHeader '/* (C) $YEAR */' // or licenseHeaderFile
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 0

我想你可以使用它p3c 插件