如何根据Google Java格式格式化代码

问题描述 投票:3回答:3

当前状态:

我有一个构建于以下项目的项目: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历史记录出现问题。

java git maven intellij-idea code-formatting
3个回答
1
投票

您可以让pre-commit hook触发已准备提交的文件的格式化程序。

maven-git-code-format使用google-java-format格式化程序,并且可以在编译阶段安装客户端预提交git hook。requiresMaven 3.5.x,应予以执行。

<build>
  <plugins>
    <plugin>
      <groupId>com.cosium.code</groupId>
      <artifactId>maven-git-code-format</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>

maven-git-code-format指向IDE中的Maven不能与嵌入式Maven很好地配合使用。mvn compile安装挂钩。对于

IDEA

,仅此而已。 作为

maven-git-code-format

仅格式化更改的文件(这很好),最好对整个项目进行一次格式化(mvn git-code-format:format-code -DglobPattern=**/*)。
Eclipse解决方法

由于EGit中的错误,有时会完全忽略Git挂钩,所以使用

Windows上的Eclipse]的开发人员应该在PATH中使用Cygwin。空的cygpath.exe将起作用。以管理员身份运行“命令提示符”,然后执行C:\>echo "" > /"Program Files"/Git/bin/cygpath.exe(对hook is not working eclipse egit client表示感谢)。 重新启动。

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

在IDE中优化导入或重新格式化,或者使用插件重新格式化,可能会导致导入顺序发生变化。如果将旧版本的

maven-git-code-format

fmt-maven-plugin一起使用(例如稍后在CI中格式化或验证代码),这将是一个令人讨厌的惊喜。
  • fmt-maven-plugin将始终对导入进行排序
  • googleformatter-maven-plugin可以选择对导入进行排序(不是默认值)
  • 为了在每次开发人员提交后运行此格式化程序,您必须首先具有一个Jenkins提交钩子,这将触发Jenkins构建。构建的其中一个阶段,应执行fmt-maven-plugin(或任何其他)的check功能,以确保代码格式正确。

    添加网络挂钩

    [要做的第一件事是添加一个Webhook,它将在git存储库中的每次提交后触发Jenkins构建。您可以找到如何执行此操作here。对于Gitlab的特定说明,this post from medium可能会有所帮助。

    执行支票

    这可以通过在check上执行fmt-maven-plugin目标来完成

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

    mvn fmt:check

    话虽如此,您将不得不添加Jenkins构建步骤,该步骤将运行上述命令。 this tutorial中的第5步向您展示如何添加构建步骤。

    希望这确实有帮助:D

    我需要在每次提交之前运行Maven

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


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

    添加网络挂钩


    0
    投票
    我需要在每次提交之前运行Maven
    © www.soinside.com 2019 - 2024. All rights reserved.