如何按照googlejava格式格式化代码

How to format code according to google java format

当前状态:

我有一个构建项目:Java 1.8.161,Maven 3.3.9,SpringBoot 2.0.1,工具:Jenkins 和 GitLab。我想使用 google java format 作为整个团队的标准。

我的调查/解决方案:

在调查过程中我发现solution,这听起来很简单。只需更新 pom 文件:

<build>
    <plugins>
        <plugin>
            <groupId>com.coveo</groupId>
            <artifactId>fmt-maven-plugin</artifactId>
            <version>2.5.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>format</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

并且有效。如果我 运行 编译、打包、验证、安装或部署 Maven 生命周期代码被格式化。

问题:

在所有团队成员的每次提交之后,我如何 运行 在他们的 IDEA 中没有任何额外步骤?因为现在,我需要在每次提交之前 运行 Maven。但是在应用程序的 运行 期间没有必要,因此团队可以避免它。这当然会导致 git.

中的历史问题

为了在每次开发人员提交后运行 这个格式化程序,您必须首先有一个 Jenkins 提交挂钩,这将触发 Jenkins 构建。构建的其中一个阶段应该执行 fmt-maven-plugin(或任何其他)的 check 功能,以确保代码格式正确。

添加网络钩子

首先要做的是添加一个 webhook,它将在您的 git 存储库中每次提交后触发 Jenkins 构建。您可以找到如何执行此操作 here. For Gitlab specific instructions, this post from medium 可能会有帮助。

正在执行检查

这可以通过在 fmt-maven-plugin

上执行 check 目标来完成

Maven 接受 <plugin-prefix>:<goal><plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal> 作为调用插件目标的方式,因此对于您的特定问题,您可以 运行:

mvn fmt:check

也就是说,您必须添加一个 Jenkins 构建步骤,这将 运行 提到的命令。 this tutorial 中的第 5 步向您展示了如何添加构建步骤。

希望这对您有所帮助 :D

您可以让 预提交钩子 触发暂存文件的格式化程序。

git-code-format-maven-plugin uses google-java-format formatter and can install client-side pre-commit git hook during compile phase. It requires Maven 3.5.x,应该强制执行。

<build>
  <plugins>
    <plugin>
      <groupId>com.cosium.code</groupId>
      <artifactId>git-code-format-maven-plugin</artifactId>
      <version>VERSION</version>
      <executions>
        <execution>
          <goals>
            <goal>install-hooks</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-enforcer-plugin</artifactId>
      <version>VERSION</version>
      <executions>
        <execution>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireMavenVersion>
                <version>[3.5.4,)</version>
              </requireMavenVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

指向 standalone Maven in IDE 就像 git-code-format-maven-plugin 一样不能很好地与嵌入式 Maven 一起玩。

mvn compile 安装钩子。对于IDEA,就是这样。

因为 git-code-format-maven-plugin 只格式化更改的文件(这很好),预先格式化整个项目一次可能很好( mvn git-code-format:format-code -Dgcf.globPattern=**/*).

Eclipse 的解决方法

由于 EGit 中的错误,它有时会完全忽略 Git 挂钩,因此在 Windows 上使用 Eclipse 的开发人员应该安装 Cygwin在路径中。一个空的 cygpath.exe 就可以了。 运行 'Command Prompt' 以管理员身份执行 C:\>echo "" > /"Program Files"/Git/bin/cygpath.exe(感谢 )。

重启。

关于 java 导入语句排序的注释

在 IDE 中优化导入或重新格式化或使用插件重新格式化,可能会导致导入顺序发生变化。如果旧版本的 git-code-format-maven-pluginfmt-maven-plugin(例如稍后在 CI 中格式化或验证代码)。

I need to run Maven before each commit

您不需要 运行 多个 Maven 目标。例如,无需 运行 maven install 即可进行格式化。一个简单的 maven compile 将形成 类.